请教一个关于分布式事务的问题.
想实现一个简单的分布式事务,代码如下:
- C# code
string connectionStringServer = ConfigurationManager.AppSettings["ConnectionStringServer"].ToString(); string connectionStringLocal = ConfigurationManager.AppSettings["ConnectionStringLocal"].ToString(); int returnValue = 0; string strCommand = "insert into [Users](UserName,UserPhone) values(@name,@phone)"; StringWriter writer = new StringWriter(); using (TransactionScope scope = new TransactionScope()) { using (SqlConnection cn1 = new SqlConnection(connectionStringServer)) { try { cn1.Open(); SqlCommand cmd1 = new SqlCommand(strCommand, cn1); cmd1.Parameters.Add("@name", SqlDbType.VarChar).Value = txtName.Text; cmd1.Parameters.Add("@phone", SqlDbType.VarChar).Value = txtPhoneNumber.Text; returnValue = cmd1.ExecuteNonQuery(); writer.WriteLine("插入远程数据库表时影响行数:{0}", returnValue); using (SqlConnection cn2 = new SqlConnection(connectionStringLocal)) { try { cn2.Open(); SqlCommand cmd2 = new SqlCommand(strCommand, cn2); cmd2.Parameters.Add("@name", SqlDbType.VarChar).Value = txtName.Text; cmd2.Parameters.Add("@phone", SqlDbType.VarChar).Value = txtPhoneNumber.Text; returnValue = 0; returnValue = cmd2.ExecuteNonQuery(); writer.WriteLine("插入本地数据库表时影响行数:{0}", returnValue); } catch (Exception ex) { writer.WriteLine("插入本地数据库表时影响行数:{0}", returnValue); writer.WriteLine("插入本地数据库表异常信息:{0}", ex.Message); } } } catch(Exception ex) { writer.WriteLine("插入远程数据库表时影响行数:{0}", returnValue); writer.WriteLine("插入远程数据库表异常信息:{0}", ex.Message); } } scope.Complete(); } if (returnValue > 0) { writer.WriteLine("事务已经提交."); } else { writer.WriteLine("事务已经回滚."); } Response.Write(writer);
当执行的时候出现"已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问"异常,两边都是SQL Server 2000,而且都已经设置过了MSDTC,但始终没有解决问题,查了一下MSDN,原文是"只有一起使用 SQL Server 的 .NET Framework 数据提供程序 (SqlClient) 和 SQL Server 2005 时,才可以使用可提升事务。",请问各位问题到底出在哪里.
[解决办法]
还解决不了,帮你顶下,学习了!!!!
[解决办法]
[解决办法]
这个问题我想我可以帮你.我遇到跟你类似的问题,当时搞得焦头烂额.
1.两台计算机启用msdtc,这个你已经做了.
2.在msdtc那里,你仔细查看网络安全那块,顺便选择好允许入站和出站
3.两台计算机的工作组要一致,IP尽量靠在一起(这个很奇怪,如果IP一台是2,另一台是3,相差不大的情况下,工作组名称可以不一致)
4.应该已经解决了.
你可以到网上去down一个,检测两台计算机的msdtc是否设置好的工具测试.这个软件的名称我忘记了.