.NET分佈式事務--TransactionScop

1、開啓DTC服務sql

方式一數據庫

     計算機—管理—服務—Distributed Transaction Coordinator—屬性—開啓安全

方式二服務器

    CMD命令子界面輸入:net start msdtc網絡

 

2、設置MSDTC分佈式

CMD命令界面輸入:dcomcnfg.exe(或者:控制面板—管理工具—組件服務)工具

組件服務--計算機--個人電腦--Distributed Transaction Coordinator-本地DTCurl

3、spa

防火牆設置
設置例外程序「C:\Windows\System32\msdtc.exe」3d


4、數據庫管理系統設置
數據庫系統的設置,具體以下圖。

右鍵 實例 屬性

 

5、代碼

DAL層代碼

public static bool ExecuteSqlTranScope(List<SqlCommand> cmdList)
        {
            int rows = 0;
            try
            {
                using (System.Transactions.TransactionScope tsCope = new System.Transactions.TransactionScope())
                {
                    foreach (SqlCommand cmd in cmdList)
                    {
                        cmd.Connection.Open();
                        PrepareCommand(cmd, cmd.Connection, null, CommandType.Text, cmd.CommandText, cmd.Parameters);
                        rows += cmd.ExecuteNonQuery();
                    }
                    tsCope.Complete();
                }
                if (rows > 0)
                    return true;
                else
                    return false;
            }
            catch
            {
                return false;
            }
        }

調用

List<System.Data.SqlClient.SqlCommand> cmdList = new List<System.Data.SqlClient.SqlCommand>();

string connectStr = "data source=192.168.1.221;initial catalog=db;persist security info=True;user id=sa;password=123456;";

string connectStr2 = "data source=192.168.1.221;initial catalog=db;persist security info=True;user id=sa;password=123456;";

string sql = "INSERT INTO [SYS_USER_ADMIN]([FID],[LANGUAGEID],[LOGIN],[PASSWORD],[NAME],[CREATEMAN],[CREATEDATE],[MODIFYMAN],[MODIFYDATE],[UPDATETIME])VALUES (NEWID(),1,'TEST','TEST','TEST','',GETDATE(),'',GETDATE(),GETDATE())";

string sql2 = "INSERT INTO [SYS_USER_ADMIN]([FID],[LANGUAGEID],[LOGIN],[PASSWORD],[NAME],[CREATEMAN],[CREATEDATE],[MODIFYMAN],[MODIFYDATE],[UPDATETIME])VALUES (NEWID(),1,'TEST2','TEST2','TEST2','',GETDATE(),'',GETDATE(),GETDATE())";

cmdList.Add(new System.Data.SqlClient.SqlCommand(sql, new System.Data.SqlClient.SqlConnection(connectStr)));

cmdList.Add(new System.Data.SqlClient.SqlCommand(sql2, new System.Data.SqlClient.SqlConnection(connectStr2)));

SqlHelper.ExecuteSqlTranScope(cmdList);

其餘錯誤狀況:

錯誤1:(前提是程序和數據庫 不在同一個服務器時)已禁用對分佈式事務管理器(MSDTC)的網絡訪問。請使用組件服務管理工具啓用 DTC 以便在 MSDTC 安全配置中進行網絡訪問。 

須要設置程序服務器的DTC 


錯誤2: 該事務管理器已經禁止了它對遠程/網絡事務的支持。 (異常來自 HRESULT:0x8004D024) 

須要設置數據庫服務器的DTC

 

錯誤3:與基礎事務管理器的通訊失敗

須要設置程序服務器的DTC 防火牆問題

參考 http://wenku.baidu.com/link?url=ps4eSRpjF6TVy0tY7jCHSSOv1SmE4wzpDnxsBmy7C21FcFgb1mJySCCf82-fUASTD12f1C_7VhKIryEFCaWLA7ZS4UwRcMlOumWmY7KNISG

相關文章
相關標籤/搜索