【发布时间】:2014-02-12 13:52:32
【问题描述】:
我遇到了以下异常:
与当前连接相关的事务已经完成 但尚未处置。交易必须在 连接可用于执行 SQL 语句。
对数据库的“调用”需要 10m 53s(在没有事务的情况下测试并成功) 并且通过事务它在 10m 后抛出异常。所以我很确定这不是产生问题的代码,而是事务超时限制。
我看到很多人都在为这个问题而苦苦挣扎,但我已经尝试了我找到的所有可能的解决方案,但仍然没有成功摆脱这个异常。
我使用以下代码:
[...]
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)。
我想不出接下来可以尝试什么了。有什么建议吗?
【问题讨论】:
标签: c# sql sql-server transactions