当我尝试在连接到SQL Server 2000的Windows Server 2003 Standard Edition SP1计算机上运行C#WinForms应用程序时,我收到以下错误,转换WinForms应用程序中的数据并将转换后的数据插入SQL服务器2005年申请。我使用SSPI连接到每个数据库。
代码包含在TransactionScope块中:
System.TimeSpan TransactionTimeOut = new TimeSpan(0, 40, 0);
using(TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionTimeOut))
{
try
{
//meat of transaction...
}
catch(Exception ex)
{
throw ex;
}
Scope.Complete();
}
错误讯息:
例外:交易已经存在 隐式或明确地 承诺或中止。
内部例外:交易有 已经隐含或明确 承诺或中止(例外情况 HRESULT:0x8004D00E)
任何人都知道可能导致此问题的原因吗?
答案 0 :(得分:4)
检查DTC是否在运行代码的计算机上启动。由于您在transactionscope中使用了2个连接,因此该事务将被提升为基于DTC的事务。
另外,检查安全性是否正确配置(通过允许匿名参与DTC交易来检查),并且防火墙允许DTC通过它。
查看此论坛常见问题:Distributed Transaction Coordinator(MSDTC) and Transaction FAQ
[与此SO问题相关:Distributed Transaction Coordinator]
答案 1 :(得分:0)
这个过程需要多长时间?如果你达到超时(不太可能超时40分钟,但仍然可能),你可能会收到该错误信息。
否则,你收到例外吗?抛出异常之前发生了什么?