2013年6月6日 星期四

MVC 4 AjaxBeginForm 用多重按鈕

參考文章:Handling multiple submit buttons on the same form - MVC Razor

一般使用Ajax.BeginForm會搭配Submit button觸發,
要使用多重按鈕
1.必須要指定所有按鈕都有相同的name屬性(name="btn")
2.每個按鈕賦予不同的值(value = "Create" or value = "Update" )
3.在Controller中,除了model的參數外(ModelDto XDto),
還要加上從View傳到Control 的值,參數的命名必須跟name屬性相同(string btn )
4.利用btn當作條件做判斷

--View-----------------------------------------------------------------------------------------------------
@using (Ajax.BeginForm("Create", "DIM", new AjaxOptions { HttpMethod = "POST", Confirm = "確定要變更?", UpdateTargetId = "ajaxBody" }))
{
    @Html.EditorFor(model => model.id)
    

}
--Controller------------------------------------------------------------------------------------------------
// POST: /DIM/Create
[HttpPost]
public ActionResult Create(ModelDto XDto, string btn)
{        
    if (ModelState.IsValid)
    {
        if (btn == "Create")
        {
            db.ModelDto .Add(XDto);
            db.SaveChanges();
        }
        else
        {
            db.Entry(XDto).State = EntityState.Modified;
            db.SaveChanges();
        }
    }
    return RedirectToAction("List");
}

2013年5月20日 星期一

C# .NET 修改系統時間

依賴系統時間執行不同方法的程式,
測試時可能就需要改變系統時間來確定程式是否有問題。

2013年5月14日 星期二

Oracle UT 自製Assert

參考Oracle PL/SQL 5th

Oracle沒有提供UT的元件,
所以必須要自己撰寫類似Assert的檢核機制。
ex.
PROCEDURE ASSERT (description IN VARCHAR2 , expected_value IN VARCHAR2, actual_value  IN VARCHAR2) --驗證用
IS
BEGIN
    DBMS_OUTPUT.PUT(description || ': ');
    IF expected_value = actual_value OR (expected_value IS NULL AND actual_value IS NULL) 
        THEN DBMS_OUTPUT.PUT_LINE('PASSED'); 
        ELSE DBMS_OUTPUT.PUT_LINE('FAILED. Expected ' || expected_value || '; got ' || actual_value); 
    END IF;
END;
PROCEDURE ASSERT (description IN VARCHAR2 , expected_value IN NUMBER, actual_value IN NUMBER) --驗證用
IS
BEGIN
    DBMS_OUTPUT.PUT(description || ': ');
    IF expected_value = actual_value OR (expected_value IS NULL AND actual_value IS NULL) 
        THEN DBMS_OUTPUT.PUT_LINE('PASSED'); 
        ELSE DBMS_OUTPUT.PUT_LINE('FAILED. Expected ' || expected_value || '; got ' || actual_value); 
    END IF;
END;
-------------------------------
<!--more>
所以UT的撰寫時,可以獨立的把上述兩個Procedure撰寫在oracle中,
或者可以直接寫在Declare裡。
ex.
Declare
    A number;--預計資料筆數
    B number;--實際資料筆數(從table撈)
    PROCEDURE ASSERT (description IN VARCHAR2 , expected_value IN VARCHAR2, actual_value  IN VARCHAR2) --驗證用
    IS
    BEGIN
        DBMS_OUTPUT.PUT(description || ': ');
        IF expected_value = actual_value OR (expected_value IS NULL AND actual_value IS NULL) 
            THEN DBMS_OUTPUT.PUT_LINE('PASSED'); 
            ELSE DBMS_OUTPUT.PUT_LINE('FAILED. Expected ' || expected_value || '; got ' || actual_value); 
        END IF;
    END;
    PROCEDURE ASSERT (description IN VARCHAR2 , expected_value IN NUMBER, actual_value IN NUMBER) --驗證用
    IS
    BEGIN
        DBMS_OUTPUT.PUT(description || ': ');
        IF expected_value = actual_value OR (expected_value IS NULL AND actual_value IS NULL) 
            THEN DBMS_OUTPUT.PUT_LINE('PASSED'); 
            ELSE DBMS_OUTPUT.PUT_LINE('FAILED. Expected ' || expected_value || '; got ' || actual_value); 
        END IF;
    END;

BEGIN
       A : =10;(預計10筆)
       SELECT Count(*) INTO B FROM table;
       ASSERT('筆數檢核:',A,B) ;
END;
------------------------------------------------------------------------------------------------
結果(DBMS_OUTPUT):
通過→
筆數檢核:PASSED
失敗→
筆數檢核:FAILED. Expected : 10 ;got 9

2013年5月7日 星期二

2013年5月3日 星期五

2013年4月30日 星期二

使用DBMS_UTILITY.format_error_backtrace

DBMS_UTILITY.format_error_backtrace

For Oracle 10g以上的EXCEPTION TRACE~

Sample from book :
------------------------PK spec-----------------------------
CREATE OR REPLACE PACKAGE EEP.ERRORTEST
AS
    PROCEDURE proc1;
    PROCEDURE proc2;
    PROCEDURE proc3;
END;

2013年4月25日 星期四

Auto increase column in Oracle


Auto increase column
1.      開啟青蛙
2.      點選Sequences
3.      在空白處按右鍵→Creat Sequence


2.      輸入以下資料,按下OK即可,Sequence Name 請輸入你要的 ex: XXXXXX
3.      使用方式:
1.      "INSERT INTO Table VALUES(XXXXXX .NEXTVAL, BrokerId , TermId, SeqNo, Stock, BSCode, MthQty, ’ MthPrice, SendFlag)"
Ex: "INSERT INTO MATCH VALUES(XXXXXX .NEXTVAL,’9898’, ‘A’, ‘0001’, ‘2330’, ’B’, ‘30’, ’20.2’, 'F')";
2.取出目前櫃號:SELECT XXXXXX.CURRVAL FROM DUAL
3.取用一組新的值:SELECT XXXXXX. NEXTVAL FROM DUAL
6. 刪除Sequence