首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 中資料庫交易處理:批量提交與回滾實作指南

     編輯:關於C#

前言

在資料庫操作中,交易機制是確保資料一致性的關鍵。當需要一次執行多個 SQL 指令,且必須全部成功或全部失敗時,交易處理便顯得不可或缺。本文將透過實際程式碼示範,在 C# 中如何使用 SqlTransaction 實現批量更新、提交與回滾。

核心程式碼解析

以下範例展示如何利用 SqlDataAdapter 搭配 SqlCommandBuilder 對 DataSet 進行批量更新,並包裹在交易中:

public void UpdateContactTableByDataSet(DataSet ds, string strTblName)
{
    try
    {
        SqlDataAdapter myAdapter = new SqlDataAdapter();
        SqlConnection conn = new SqlConnection(strConnection);
        SqlCommand myCommand = new SqlCommand("select * from " + strTblName, conn);
        myAdapter.SelectCommand = myCommand;
        SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);

        conn.Open();
        SqlTransaction myTrans = conn.BeginTransaction();
        myCommand.Transaction = myTrans;

        try
        {
            myAdapter.Update(ds, strTblName);
            myTrans.Commit();
        }
        catch (Exception e)
        {
            try
            {
                myTrans.Rollback();
            }
            catch (SqlException ex)
            {
                if (myTrans.Connection != null)
                {
                    Console.WriteLine("回滾失敗! 異常類型: " + ex.GetType());
                }
            }
        }
        finally
        {
            conn.Close();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

關鍵步驟說明

  1. 建立連線與命令:使用 SqlConnection 和 SqlCommand 設定查詢指令。
  2. 啟動交易:呼叫 conn.BeginTransaction() 開啟交易,並將命令的 Transaction 屬性指向該交易物件。
  3. 執行批量更新:myAdapter.Update(ds, strTblName) 會根據 DataSet 的變更自動產生 INSERT/UPDATE/DELETE 指令(由 SqlCommandBuilder 產生)。
  4. 提交或回滾:更新成功呼叫 Commit(),發生例外則呼叫 Rollback() 復原所有變更。
  5. 資源釋放:在 finally 區塊確保連線關閉,避免連線洩漏。

最佳實踐建議

  • 使用 using 區塊自動管理 SqlConnection、SqlTransaction 等實作 IDisposable 的物件。
  • 捕捉具體例外類型(如 SqlException),避免吞沒錯誤資訊。
  • 針對大量資料考慮調整 BatchSize 或改用 SqlBulkCopy 以提升效能。

結語

掌握交易處理能有效保障資料完整性。實務上應結合錯誤記錄、重試機制與效能監控,構建健壯的資料存取層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved