1

如果我使用下面的 c# 代码从数据库中检索存储过程

 _command = database.GetStoredProcCommand("ReadQueue");
 _command.CommandTimeout = 0; 

ReadQueueDB中的程序:

BEGIN
    EXEC('WAITFOR (RECEIVE * FROM MSGQUEUE), TIMEOUT 120000 ;')
END

当我从代码执行命令时,超时时间是 0 还是 120 秒?

谢谢你。

4

1 回答 1

0

两者兼而有之。

如果您使用命令 timeout = 100 秒,它会在 100 秒后超时,更不用说“WAITFOR”了。

在您的示例中,命令超时是“不确定的”,因此“WAITFOR”会改为启动。
我在这里假设 SQL 2102 顺便说一句。

https://msdn.microsoft.com/en-us/library/ms187331.aspx

“TIMEOUT”仅适用于 Service Broker,因此在 Receive https://msdn.microsoft.com/en-us/library/ms186963(v=sql.110).aspx下我们看到:

“如果超时到期,RECEIVE 返回一个空结果集。”

因此,在 120 秒后,您将继续执行空结果集(不会发生错误),并且在那之后您拥有的任何内容都将继续正常执行。

于 2015-10-20T08:24:33.357 回答