ADO.NET 快速入門(七):使用數據庫事務

數據庫事務用於控制數據提交到數據庫。例如,在標準的帳戶程序,帳戶的借貸必須同時完成。因爲電腦偶爾發生故障(電力中斷、網絡中斷,等等),可能有些記錄被更新或者添加,可是另一些沒有。爲了不這些狀況,能夠使用事務。ADO.NET 中的事務和 ADO 同樣,是在數據庫級別處理:即數據庫必須支持事務。
 
針對事務有三個基本命令:BeginTransaction、Commit、和 Rollback。BeginTransaction 標識着事務的開始。任何發生在 BeginTransaction 和下個命令(要麼 Rollback 要麼 Commit)都被認爲是事務的一部分。下面的示例代碼顯示了使用 SqlConnection 和 SqlCommand 插入2行記錄到「Region」表。假如任何一個操做失敗,變更會被回滾;若是都成功了,纔會提交事務。
 
示例一:  
 
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
            SqlCommand myCommand = new SqlCommand();
            SqlTransaction myTrans;

            // 打開鏈接
            myConnection.Open();
            // 指定鏈接屬性
            myCommand.Connection = myConnection;
            // 開始事務
            myTrans = myConnection.BeginTransaction();
            // 爲一個掛起的本地事務指定事務對象
            myCommand.Transaction = myTrans;

            try
            {
                myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)";
                myCommand.ExecuteNonQuery();

                // 插入第一條記錄
                myCommand.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')";
                myCommand.ExecuteNonQuery();

                // 插入第二條記錄
                myCommand.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')";
                myCommand.ExecuteNonQuery();

                // 提交數據庫事務
                myTrans.Commit();
                Console.WriteLine("兩條記錄寫入數據庫!");
            }
            catch (Exception e)
            {
                // 從掛起狀態回滾事務
                myTrans.Rollback();
                Console.WriteLine(e.ToString());
                Console.WriteLine("沒有記錄寫入數據庫!");
            }
            finally
            {
                // 關閉鏈接
                myConnection.Close();
            }

 

就像在傳統的 ADO 同樣,你能夠經過 Connection 對象控制事務。實際上,當你使用 OleDbConnection 時,使用的是一樣的 OLE DB 底層事務模型。所以,傳統的 ADO 針對數據的事務提交,也能經過 ADO.NET 來提交。
 
DataSet 對象也擁有 Commit 模型(AcceptChanges、RejectChanges),可是不會影響數據庫。Commit 模型只是單獨針對 DataSet 中的緩存數據。從 DataSet 提交數據到數據庫,使用 SqlDataAdpaterde 的Update 方法。
 
原文連接:
相關文章
相關標籤/搜索