SqlCommand.CommandTimeout.NETと.NETに違いはありSqlConnection.ConnectionTimeoutますか?
6 に答える
はい。CommandTimeout1つのコマンドが完了するまでにかかる時間です。ConnectionTimeout最初にサーバーへの接続を確立するのにかかる時間です。
たとえば、比較的長時間実行されるクエリを実行している場合、完了するまでに10分かかることはまったく問題ありませんが、接続を開始するのに10分かかる場合は、何かがひどく間違っていることがわかります。
SqlCommand.CommandTimeout=SQLクエリのタイムアウト制限。つまり、(例:SELECT、UPDATE)クエリの実行にかかる時間。を超えるSqlCommand.CommandTimeoutと実行を停止します。コマンドタイムアウトエラーが発生します。
SqlConnection.ConnectionTimeout=接続のタイムアウト制限。つまり、接続オブジェクトが接続を試行できる時間。指定時間を超えると接続を停止します。接続タイムアウトエラーが発生します。
ConnectionTimeoutを開こうとしたときにタイムアウトするまで待機する期間を指定しますSqlConnection。コマンドに関連していConnection.Open()ます。
その間
SqlCommand.CommandTimeoutSqlCommandがタイムアウトするまで待機する期間を指定しました。これは、接続が開かExecuteXXXれ、コマンドオブジェクトでメソッドの1つが呼び出された後に発生します。
追加情報
デフォルト値CommandTimeoutは30秒です。ゼロ(0)は制限がないことを示します。CommandTimeout値はコーディングでのみ設定できます。
デフォルト値ConnectiontTimeoutは15秒です。Zero(0)は、制限がないことも示します。ゼロ未満の値(マイナス値)はを取得しArgumentExceptionます。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設定は、(Commandオブジェクトを使用せずに)Connectionオブジェクトでのみ実行されるコマンドにのみ影響します。
たとえば、ストアドプロシージャに接続してコマンドオブジェクトにパラメータを追加し、接続オブジェクトの接続を使用してコマンドオブジェクトを実行する場合は、コマンドオブジェクトに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