zoukankan      html  css  js  c++  java
  • .net mysql dts 分布式事务 Multiple simultaneous connections or connections with different connection··

    如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:
    1、在项目中引用using System.Transactions命名空间(先要在添加net组件的引用);

    2、对MSDTC组件设置:
    步骤:
      在控制面板-->管理工具-->服务 中,开启Distributed Transaction Coordinator 服务。或者直接在运行里面输入  dcomcnfg
    a.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
    b.选择MSDTC页, 确认"使用本地协调器"
    c.点击下方"安全配置"按钮
    d.勾选: "允许网络DTC访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".
    e.对于数据库服务器端, 可选择"要求对呼叫方验证"
    f.勾选:"启用事务Internet协议(TIP)事务"。
    g.在双方防火墙中增加MSDTC.exe例外
       可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable

    如果只是一台主机,或者是本地测试,可以这样

    image

    今天在拿以前sqlserver中运行的好好的dts事务执行时候,在结合mysql数据库的时候,报错,报错信息:

    Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

    那么mysql到底支持分布式事务么?

    答案是支持,但是有一个条件。那就是你事务里面执行的语句/存储过程,他们只能指向同一个connstr链接字符串,也就是mysql的事务,只能对同一个数据库,并且是同一个链接字符串,我今天遇到报错,就是在一个事务里面,查询了2个不同的数据库,所以就报错了。

    上一下我的代码

    TransactionOptions transactionOption = new TransactionOptions();
    
                //设置事务隔离级别
                transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
    
                // 设置事务超时时间为5分10秒
                transactionOption.Timeout = new TimeSpan(0, 5, 10);
    
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
                {
                    try
                    {
    
                        // 多次执行数据库的代码,我是用多个存储过程
    
                        scope.Complete();
                        //在Complete后面不要写代码,因为这个事务已经完成了 否则会报错 
    //可以看看这个报错事务报错 [Exception] 当前 TransactionScope 已完成
    } catch (Exception ex) { throw new MessageJxtException(Message.操作失败本次操作没有执行); } } 关于这里面的 事务隔离级别transactionOption.IsolationLevel 可以看看
    http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html

    可以参考一下这个网址的分析 http://www.cnblogs.com/nielsliu/articles/1280038.html

    image

    image

    引发异常:Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

    image

    引发异常:MySQL Connector/Net does not currently support distributed transactions.

    结论:MySql目前版本(MySql5.0, MySQL Connector/Net 5.2.3)支持同一个连接字符串内多个连接实例的事务,不支持不同连接字符串以及不同数据库之间的事务。

    还可以参考 http://www.cnblogs.com/wonderful_morining/archive/2012/04/18/2455728.html

  • 相关阅读:
    weblogic 正常启动页面还是404
    oracle awr 生成
    jre 修改timezone 夏令时冬令时问题
    apache 2.4 配置loadbalance
    plsq 调试存储过程
    Windows怎么命令行修改文件权限
    Windows上面挂载NFS共享
    linux sar命令详解
    Tomcat Connector connectionTimeout含义和验证
    c++STL系列之Set
  • 原文地址:https://www.cnblogs.com/joeylee/p/2922069.html
Copyright © 2011-2022 走看看