交易超时

时间:2014-02-12 13:52:32

标签: c# sql sql-server transactions

我遇到以下异常的问题:

  

与当前连接关联的事务已完成   但尚未处理。交易必须在交易之前处理   连接可用于执行SQL语句。

针对数据库的“调用”需要10分53秒(在没有事务的情况下测试并成功) 并且在事务发生后,它会在10米后抛出异常。所以我很确定这不是产生问题的代码,而是事务超时限制。

我已经看到很多人都在努力解决这个问题,但我已经尝试了所有可能的解决方案,但是仍然没有成功摆脱这种异常。

以下代码我使用:

[...]
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Snapshot;
transactionOptions.Timeout = new TimeSpan( 0, 0, 30, 0, 0 );

using( var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions) )
{
     foreach (var selector in GetDataContext().sp_GetChangedSelectors(changeSet))
     {
          // xml-result will be stored in a file
     }

     // multiple other SP calls the same way

     scope.Complete( );
}

我添加了声明

<system.transactions>
    <machineSettings maxTimeout="02:00:00"/>
</system.transactions> 

%WINDIR%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config 中的 machine.config 在两台机器上(本地和sql-server-machine)。

我的想法已经不合时宜了。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

只是一个疯狂的猜测:你正在运行32位应用程序吗?那么这可能是错误的machine.config!

%WINDIR%\ Microsoft.NET \框架\ v4.0.30319

否则我会检查web.config或app.config

中是否覆盖了这个值

答案 1 :(得分:1)

确保修改了正确的machine.config文件。

根据您编译应用程序的方式(AnyCPU / x64 / x86,“首选32位”),使用的machine.config将不同(Framework与Framework64)。

还要确保在修改machine.config后重新启动计算机。