.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

posted @ 2013-02-22 12:12  梨花驿路  阅读(3610)  评论(4编辑  收藏  举报