2010-07-30 55 views

回答

0

如果你还没有关闭你的SQL连接,它应该继续运行,如果它已经开始执行。 (你应该可以测试&对此比较容易验证。)

5

答案是否定的,你在服务器上的尝试操作将在30秒后失败,你的SqlCommand对象会在你的代码中抛出一个异常(下面)存储过程事务将回滚。

超时已过期。操作完成之前超时的时间或服务器没有响应。

...至少这是我可以验证使用SQL Server我想知道完全相同的行为......

+0

这里特殊的是“隐式交易”。所有sql命令(至少每一个都是IMPLICIT事务的AUTOAMTICALLY部分),即使没有显式设置事务。 – TomTom 2010-08-01 21:58:44

+0

这个异常是一个明确的事务,除非SET XACT_ABORT ON被设置 - 直到连接本身关闭,否则这个事务根本不会回滚并保持打开/未提交状态。在连接池中,这可能永远不会发生(下一个命令可能会在事务的上下文中运行?不确定但是存在风险) – urbanhusky 2015-06-26 09:48:30

1

。我找不到答案,但做了一些试验,看起来好像发送了某种取消查询:

  • 如果涉及触发器或表被锁定,它将不会更新。
  • 如果有多个语句,而不是在事务中,它将在发生超时之后取消这些语句。已经完成的工作仍在继续。
  • 如果您在插入之前添加延迟,则表中没有内容。
  • 如果您在插入后添加了延迟,则会将插入内容写入您的表格。

我知道这是一个五岁的岗位,但如果我来到这里,其他人也:-)

顺便说一句,在ado.net,以增加你的超时时间,你必须在sqlcommand和sqlconnection中增加,第一个的默认值是15秒,第二个30秒。所以如果你只是将sqlcommand改为60秒,它将在30秒后仍然超时,这可能会令人费解。