【问题标题】:Will CommandTimeout property override timeout argument in SQL statement将 CommandTimeout 属性覆盖 SQL 语句中的超时参数
【发布时间】:2015-10-20 08:16:59
【问题描述】:

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

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

ReadQueue DB 中的过程:

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

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

谢谢。

【问题讨论】:

    标签: c# sql-server tsql command-timeout


    【解决方案1】:

    两者兼而有之。

    如果您使用命令 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 秒后,您将继续执行一个空结果集(不会发生错误),并且在那之后您所拥有的任何内容都将继续正常执行。

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2015-09-12
      相关资源
      最近更新 更多