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

ASP.NET 2.0 資料教程 63:資料庫交易擴充 DAL-TransactionScope、SqlTransaction、原子操作與批次處理架構基礎

     編輯:關於ASP.NET

前言

批次處理 (新增/更新/刪除多筆) 需原子性:要么全成功、要么全失敗。本文擴充 DAL 支援資料庫交易,為後續批次介面奠基。

交易基本模式

  1. 宣告交易開始
  2. 執行構成交易的 SQL 命令
  3. 任一失敗 → Rollback
  4. 全部成功 → Commit

ADO.NET 交易實作方式

方式一:SqlTransaction (手動控制)

SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlTransaction tx = conn.BeginTransaction();
try
{
    SqlCommand cmd = conn.CreateCommand();
    cmd.Transaction = tx;
    cmd.CommandText = "UPDATE ...";
    cmd.ExecuteNonQuery();
    // 更多命令...
    tx.Commit();
}
catch
{
    tx.Rollback();
    throw;
}
finally { conn.Close(); }

方式二:TransactionScope (System.Transactions, .NET 2.0+)

using (TransactionScope scope = new TransactionScope())
{
    // 多個 DAL/BLL 操作,甚至跨資料庫
    ProductsBLL.UpdateProduct(...);
    OrdersBLL.CreateOrder(...);
    scope.Complete(); // 無例外則 Commit
}
// 例外拋出或未呼叫 Complete → 自動 Rollback
  • 支援分散式交易 (MSDTC),跨資料庫/資源管理員。
  • 程式碼更簡潔、可讀性高。
  • 需注意 MSDTC 設定、效能開銷。

擴充 TableAdapter 支援交易 (第 63 章核心)

  1. 開啟 Dataset 設計師 → 右鍵 TableAdapter → View Code。
  2. 新增方法暴露內部 SqlTransaction:
public partial class ProductsTableAdapter
{
    public void BeginTransaction()
    {
        this.Connection.Open();
        this.Transaction = this.Connection.BeginTransaction();
        foreach (SqlCommand cmd in this.CommandCollection)
            cmd.Transaction = this.Transaction;
    }

    public void CommitTransaction()
    {
        this.Transaction.Commit();
        this.Connection.Close();
    }

    public void RollbackTransaction()
    {
        this.Transaction.Rollback();
        this.Connection.Close();
    }
}

BLL 封裝交易方法

public void DeleteProductsWithTransaction(List<int> productIDs)
{
    ProductsTableAdapter adapter = new ProductsTableAdapter();
    adapter.BeginTransaction();
    try
    {
        foreach (int id in productIDs)
            adapter.Delete(id);
        adapter.CommitTransaction();
    }
    catch
    {
        adapter.RollbackTransaction();
        throw;
    }
}

結語

DAL 層支援交易是批次處理架構基石。TransactionScope 為現代首選,SqlTransaction 適用於需精細控制單一連接的舊代碼遷移。後續章節將建構批次新增/更新/刪除完整介面。

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