考虑一个存储过程,该过程在60秒内更新某些行而不使用事务。我们将ADO.NET的SqlCommand.Timeout设置为30秒。
SqlCommand.Timeout = 30;
当超时发生在30秒时,存储过程是否会继续在数据库服务器中运行?服务器如何将此信息传达给客户端?
答案 0 :(得分:6)
答案是否定的,您在服务器上尝试的操作将在30秒后失败,您的SqlCommand对象将在您的代码中抛出异常(如下所示),并且隐式存储过程事务将回滚。
超时已过期。操作完成之前经过的超时时间或服务器没有响应。
...至少这是我可以使用SQL Server验证的行为......
答案 1 :(得分:1)
我想知道完全一样。我找不到答案,但做了一些实验,看起来像某种取消查询发送:
我知道这是一个五岁的帖子,但如果我到这里,其他人也会: - )
顺便说一句,在ado.net中,为了增加你的超时,你必须增加sqlcommand和sqlconnection,第一个的默认值是15秒,第二个30秒。因此,如果您只是将sqlcommand更改为60秒,它将在30秒后仍然超时,这可能相当令人费解。
答案 2 :(得分:0)
如果您还没有关闭SQL连接,它应该继续运行,如果它已经开始执行proc。 (您应该能够相对轻松地测试和验证这一点。)