程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ASP.NET開發過程中的事務處理

ASP.NET開發過程中的事務處理

編輯:C#入門知識

  今天重新看了一遍《asp.net高級程序設計第四版》的第七章,關於asp.net的事務處理這一塊,之前看的時候由於工作中也沒有用到它所以沒怎麼在意,不過真是應了那句話:溫故而知新呀。

  今天的內容不是很多,代碼演示也不多,所以可以早早寫完休息。

  事務:事務可以理解為一種必須同時完成或全部失敗的操作。書中的經典例子:賬戶轉賬,A賬戶與B賬戶之前必須A-100同時B+100,這個操作必須同時成功,只要有個失敗兩個步驟都需要回滾,這樣的一個完整過程就可以稱為一個【事務】。


 

  整個小節講解事務處理可以歸納為以下幾點:

  • 存儲過程實現事務:這是實現事務的一種比較好的方式。

       語法:BEGIN TRANSACTION 

       成功:COMMIT

       失敗:ROLLBACK

 下面是一個比較簡單的是個例子主要是為了演示一下用法:

CREATE PROCEDURE myTransaction(
@amount MONEY,---轉賬金額
@countA INT,--賬戶A
@countB INT--賬戶B
)
AS 
BEGIN TRANSACTION

  ---這裡是你自定義的SQL更新語句A
   /*
  
  
  
  
  
  
  
  
  */
  --@@ERROR始終是一個記錄當前執行SQL錯誤信息的變量,每一個更新之後會重新自動置0
  IF(@@ERROR>0)
    ROLLBACK
  ---這裡是你自定義的SQL更新語句B
  /*
  
  
  
  
  
  
  
  
  */
  IF(@@ERROR>0)
    ROLLBACK
  ---全部更新已經執行完成 
  COMMIT   --更新事務狀態
  RETURN
  
  
  • ADO.NET實現事務

       語法:通過調用connection對象的 BeginTransaction()方法開始,該方法返回一個Transaction對象,用於管理事務。由於ADO.NET針對不同的數據庫提供程序提供不同的ADO.NET對象,對應的事務對象類名也不一樣如:SqlTransaction OledbTransaction OracleTransaction,這裡就以SQL Server數據提供程序為例,提供一個標准例子,主要是演示用法:

      成功:con.Commit();

      失敗:con.Rollback();

   SqlConnection con=new SqlConnection(strConnect);
            SqlCommand cmd1 = new SqlCommand(strSQL1,con);
            SqlCommand cmd2 = new SqlCommand(strSQL2, con);
             SqlTransaction tran=null;
            try
            {
                con.Open();
                 tran = con.BeginTransaction();  //創建事務
                
                //將Cmd對象提交到事務中
                cmd1.Transaction = tran;
                cmd2.Transaction = tran;

                //執行更新
                cmd1.ExecuteNonQuery();
                cmd2.ExecuteNonQuery();

                //全部更新成功,刷新事務狀態
                tran.Commit();

            }
            catch
            {
                //更新失敗事務回滾
                tran.Rollback();

            }
            finally {
                con.Close();
            }

 

  • COM+實現事務:不過書中沒有細節去討論這一塊。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved