【发布时间】:2015-12-29 04:56:16
【问题描述】:
我正在使用CommittableTransaction 删除大量记录,超时时间为 300 秒。偶尔会出错
SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。
似乎在超时后,SQL 正在自动执行回滚,并且回滚需要大约 200 秒才能完成。
但我当前的 C# 代码捕获了SqlException 并检查了TransactionStatus(即Aborted)并继续进行。由于正在回滚,所以我应该等到回滚完成。有没有办法找到回滚状态?或者我该如何处理这种情况?
【问题讨论】:
-
你也可以手动设置超时时间..
-
请注意,回滚不是由 C# 代码发起的。事务超时后似乎 SQL Server 正在自动执行回滚。
-
@WPFLearner,SQL Server 中没有查询超时之类的东西——它纯粹是客户端的概念。基本上,在将每条语句发送到 SQL Server 之后,数据提供者层会等待指定的时间段,如果过期,则将低级
Abort命令发送到连接中。因此,取消处理的不是您的代码,是的,但它仍然是客户端代码。 -
@RogerWolf,我明白你的意思。在客户端,有没有办法等待回滚结束?
标签: c# sql sql-server transactions sqlexception