.net mysql 分布式事务处理_.net mysql dts 分布式事务 Multiple simultaneous connections or connections with differ...

如果在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

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

71f632665ff8a32d4fa52c0eadafdf52.png

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

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

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

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

上一下我的代码 TransactionOptionstransactionOption = newTransactionOptions();

//设置事务隔离级别transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;

// 设置事务超时时间为5分10秒transactionOption.Timeout = newTimeSpan(0, 5, 10);

using(TransactionScopescope = newTransactionScope(TransactionScopeOption.Required, transactionOption))

{

try{

//多次执行数据库的代码,我是用多个存储过程

scope.Complete();

//在Complete后面不要写代码,因为这个事务已经完成了 否则会报错

//可以看看这个报错事务报错 [Exception] 当前 TransactionScope 已完成

}

catch(Exceptionex)

{

throw newMessageJxtException(Message.操作失败本次操作没有执行);

}

}

关于这里面的 事务隔离级别transactionOption.IsolationLevel 可以看看

2b07c444e810bfd03e7f5d7b19322993.png

537be5899b9fcb80d57a92862c57a613.png

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

8cc96b760ba6d577e5b77a413b324cac.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值