1

以下のC#コードを使用してDBからストアドプロシージャを取得する場合

 _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

「タイムアウト」は Service Broker にのみ適用されるため、Receive https://msdn.microsoft.com/en-us/library/ms186963(v=sql.110).aspxの下に次のように表示されます。

「タイムアウトになると、RECEIVE は空の結果セットを返します。」

したがって、120 秒後、空の結果セット (エラーは発生しません) で実行を継続し、その時点以降は通常どおり実行を継続します。

于 2015-10-20T08:24:33.357 に答える