HRESULT:0x8004D00E使用TransactionScope - C#

时间:2009-04-23 23:59:48

标签: c# .net sql-server-2005 sql-server-2000 transactionscope

当我尝试在连接到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)

任何人都知道可能导致此问题的原因吗?

2 个答案:

答案 0 :(得分:4)

检查DTC是否在运行代码的计算机上启动。由于您在transactionscope中使用了2个连接,因此该事务将被提升为基于DTC的事务。

另外,检查安全性是否正确配置(通过允许匿名参与DTC交易来检查),并且防火墙允许DTC通过它。

查看此论坛常见问题:Distributed Transaction Coordinator(MSDTC) and Transaction FAQ

[与此SO问题相关:Distributed Transaction Coordinator]

答案 1 :(得分:0)

这个过程需要多长时间?如果你达到超时(不太可能超时40分钟,但仍然可能),你可能会收到该错误信息。

否则,你收到例外吗?抛出异常之前发生了什么?