在上一个实例中是将所有的代码都放在了ts的范围内去执行,现在把三个操作分别定义自己的数据库连接封装在三个不同的方法中,然后将这三个方法放在ts范围内去执行。经过测试出现了一个错误“msdtc不可用”。网上查看了一下,原来需要把这个服务打开。于是本人查看了一下计算机服务,的确没有打开,打开后程序运行正常。但是之后问题出来了,为什么在上一个实例的时候没有报错呢?先来说说这个服务,百度上是这样描述的:
描述: msdtc.exe是微软分布式传输协调程序。该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器。
msdtc.exe是一个并列事务,是分布于两个以上的数据库,消息队列,文件系统或其他事务保护资源管理器,删除要小心。
通过上面的描述,本人觉得可能是将方法进行封装的时候各自都定义了自己不同的数据库连接,导致需要系统使用msdtc服务或者就是ts在将代码封装在方法中执行时有别的什么要求。通过将方法修改为传入同一个连接之后,执行后就没问题了(当然这时是把msdtc服务关闭的)。印证了第一个猜测。以下是转网上对msdtc设置的文字:
MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器 .
位置:控制面板--管理工具--服务--Distributed Transaction Coordinator
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。解决办法:
1. 在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动
2.在CMD下运行"net start msdtc"开启服务后正常。
注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:
(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
(2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)
(3) 最后输入:net start msdtc 回车,搞定!