SqlCommand.CommandTimeout
とSqlConnection.ConnectionTimeout
.NETの間に違いはありますか?
回答:
はい。CommandTimeout
1つのコマンドが完了するまでにかかる時間です。ConnectionTimeout
最初にサーバーへの接続を確立するのにかかる時間です。
たとえば、比較的長時間実行されるクエリを実行している場合、完了するまでに10分かかることはまったく問題ありませんが、接続を開始するのに10分かかる場合は、何かがひどく間違っていることがわかります。
SqlCommand.CommandTimeout
= SQLクエリのタイムアウト制限。つまり、(例:SELECT
、UPDATE
)クエリの実行にかかる時間。を超えるとSqlCommand.CommandTimeout
、実行を停止します。コマンドタイムアウトエラーが発生します。
SqlConnection.ConnectionTimeout
=接続のタイムアウト制限。つまり、接続オブジェクトが接続を試行できる時間。指定時間を超えると接続を停止します。接続タイムアウトエラーが発生します。
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
CommandTimeoutはConnectionオブジェクトとCommandオブジェクトの両方のプロパティであるため、クイックノート...
ConnectionオブジェクトのCommandTimeout設定は、同じConnectionのCommandオブジェクトのCommandTimeout設定には影響しません。つまり、CommandオブジェクトのCommandTimeoutプロパティは、ConnectionオブジェクトのCommandTimeout値の値を継承しません。
したがって、ConnectionオブジェクトのCommandTimeout設定は、Connectionオブジェクトでのみ実行されるコマンドにのみ影響します(Commandオブジェクトは使用しません)。
たとえば、ストアドプロシージャに接続してコマンドオブジェクトにパラメータを追加し、接続オブジェクトの接続を使用してコマンドオブジェクトを実行する場合は、コマンドオブジェクトにCommandTimeoutを設定し、接続オブジェクトにConnectionTimeoutを設定して両方をオーバーライドする必要がありますデフォルト。接続オブジェクトにCommandTimeoutを設定しても、コマンドオブジェクトコマンドのデフォルトのタイムアウトは上書きされません。
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us / sql / ado / reference / ado-api / connectiontimeout-property-ado?view = sql-server-ver15