.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

相关文章
相关标签/搜索