net中交易處理的處理方案
發表時間:2023-08-22 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在數據庫軟件中,其核心就是對數據庫記錄進行查詢添加修改及刪除操作,這是非常關鍵的也是必須非常謹慎的去完成。在現有的程序中經常會有因為某些錯誤而造成數據丟失甚至是系統崩潰,這就對我們的程序提出了一個數...
在數據庫軟件中,其核心就是對數據庫記錄進行查詢添加修改及刪除操作,這是非常關鍵的也是必須非常謹慎的去完成。在現有的程序中經常會有因為某些錯誤而造成數據丟失甚至是系統崩潰,這就對我們的程序提出了一個數據操作的錯誤處理要求。
例如在進行銀行轉帳處理時,我們先從轉出帳號減掉要轉出的金額,然后再在接收的帳號上加上相應的金額。如果一切處理OK,我們的錢能順利到達接收帳號。但要是系統在執行接收金額的步驟上出錯了,那么不但自已錢變少了,該收到的人也沒有收到,那筆錢就這樣消失了.這是一個很危險的現像。解決辦法就是要對數據操作的每一步都進行錯誤監控,一旦發現出錯了,馬上恢復數據至整個操作前的原始狀態。.NET中提出了一個交易(Transaction)的觀念,可以解決此類問題。
我現在來用交易實現上面的例子:
string sql1 = "..."; //在轉出帳號上減去金額的處理SQL語句
string sql2 = "..."; //在接收帳號上加上金額的處理SQL語句
SqlConnection conn = new SqlConnection("..."); //建立數據庫連接
conn.Open(); //接開數據庫連接
SqlTransaction tran = conn.BeginTransaction(); //開始進行交易處理
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.Transaction = tran;
try
{
comm.CommandText = sql1;
comm.ExecuteNonQuery();
comm.CommandText = sql2;
comm.ExecuteNonQuery();
tran.Commit(); //接受交易,完成操作
}catch
{
tran.Rollback(); //交易失敗,恢復數據
}
finally
{
conn.Close(); //關閉數據庫連接。
}
其實還有另外一種方法也可以實現以上目標。在transaction-sql中也提供了交易處理的方法(我想上種方法最終實現還是轉換為此方法實現的).我們可以把以上處理建立為一個存儲過程,然后再用SqlCommand進行調用,這個存儲過程的主要的相關內容為(其中...處代表要進行數據庫記錄操作的多條SQL語句):
BEGIN TRANSACTION
...
IF (@@ERROR > 0) ROLLBACK TRANSACTION
ELSE COMMIT TRANSACTION