CommandTimeout 属性 会覆盖 SQL 语句中的超时参数

Will CommandTimeout property override timeout argument in SQL statement

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

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

ReadQueue 数据库中的程序:

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

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

谢谢。

两者兼而有之。

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

在您的示例中,命令超时为 "indefinite",因此 "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 下我们看到:

"If the time-out expires, RECEIVE returns an empty result set."

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