ADO.NET 4 快速上手(6)——事務

六、    事務


1.    本地事務

事務只能在打開的數據庫連接上工作。
using (SqlConnection conn = new SqlConnection(
    "Data Source=localhost;Initial Catalog=SettingKnowledgeManagement;Integrated Security=True"))
{
    conn.Open();
    SqlTransaction tran = conn.BeginTransaction();
    SqlCommand cmd = new SqlCommand("select * from tb_user", conn, tran);
    // 或:
    // cmd.Transaction = tran;

    try
    {
        tran.Commit();
    }
    catch (Exception e1)
    {
        try
        {
            tran.Rollback();
            // output e1.Message
        }
        catch (Exception e2)
        {
            // output e2.Message
        }
    }
}

2.    分佈事務

.Net Framework通過“微軟分佈式事務處理協調器(MSDTC)”對分佈式事務提供支持。TransactionScope實現,但不是ADO.NET的類,要添加引用System.Transactions.dll。
提示:在運行分佈式事務時,遇到錯誤“MSDTC on server ‘servername’ is unavailable”。指Distributed Transaction Controller服務沒有運行,啓動該服務即可。

using (TransactionScope envelope = new TransactionScope())
{
    using (SqlConnection sourceConn = new SqlConnection("connection string"))
    {
        using (SqlConnection destConn = new SqlConnection("connection string"))
        {
            try
            {
                sourceConn.Open();
                sourceCmd.ExecuteNonQuery();

                destConn.Open();
                destCmd.ExecuteNonQuery();

                envelope.Complete();
            }
            catch (Exception ex)
            {
                // Output "Error transferring funds: " + ex.Message;
            }
        }
    }
}
發佈了32 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章