• .NET分布式事务--TransactionScop


    一、开启DTC服务

    方式一

         计算机—管理—服务—Distributed Transaction Coordinator—属性—开启

    方式二

        CMD命令子界面输入:net start msdtc

    二、设置MSDTC

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

    组件服务--计算机--我的电脑--Distributed Transaction Coordinator-本地DTC

    三、

    防火墙设置
    设置例外程序“C:WindowsSystem32msdtc.exe”


    四、数据库管理系统设置
    数据库系统的设置,具体如下图。

    右键 实例 属性

    五、代码

    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

  • 相关阅读:
    AE计算Tin的体积
    Create a Geometric Network and Set Flow Direction
    为什么查询的时候只能获取FID字段
    美国白蛾入侵北京 GIS兵法破解危局
    字段排序
    如何对ArcSDE空间网格大小进行优化?
    How to create a geodatabase network dataset
    抗击海冰 地理信息系统来帮忙
    控件图片生成网站
    Pascal 之(冒泡排序)
  • 原文地址:https://www.cnblogs.com/hakuci/p/5301729.html
Copyright © 2020-2023  润新知