如果我使用下面的 c# 代码从数据库中检索存储过程
_command = database.GetStoredProcCommand("ReadQueue");
_command.CommandTimeout = 0;
ReadQueue
DB中的程序:
BEGIN
EXEC('WAITFOR (RECEIVE * FROM MSGQUEUE), TIMEOUT 120000 ;')
END
当我从代码执行命令时,超时时间是 0 还是 120 秒?
谢谢你。
如果我使用下面的 c# 代码从数据库中检索存储过程
_command = database.GetStoredProcCommand("ReadQueue");
_command.CommandTimeout = 0;
ReadQueue
DB中的程序:
BEGIN
EXEC('WAITFOR (RECEIVE * FROM MSGQUEUE), TIMEOUT 120000 ;')
END
当我从代码执行命令时,超时时间是 0 还是 120 秒?
谢谢你。
两者兼而有之。
如果您使用命令 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 秒后,您将继续执行空结果集(不会发生错误),并且在那之后您拥有的任何内容都将继续正常执行。