SqlCommand.CommandTimeout プロパティ


コマンド実行の試行を終了してエラーを生成するまでの待機時間 (秒単位) を取得または設定します。Gets or sets the wait time (in seconds) before terminating the attempt to execute a command and generating an error.

 virtual property int CommandTimeout { int get(); void set(int value); };
 property int CommandTimeout { int get(); void set(int value); };
public override int CommandTimeout { get; set; }
public int CommandTimeout { get; set; }
member this.CommandTimeout : int with get, set
Public Overrides Property CommandTimeout As Integer
Public Property CommandTimeout As Integer



コマンドの実行を待機する時間 (秒単位)。The time in seconds to wait for the command to execute. 既定値は 30 秒です。The default is 30 seconds.




値0は制限がないことを示します (コマンドを実行しようとすると、無制限に待機します)。A value of 0 indicates no limit (an attempt to execute a command will wait indefinitely).


CommandTimeout プロパティは、以前の APM (非同期プログラミングモデル) の非同期メソッド呼び出し (BeginExecuteReaderなど) によって無視されます。The CommandTimeout property will be ignored by older APM (Asynchronous Programming Model) asynchronous method calls such as BeginExecuteReader. これは、ExecuteReaderAsyncなどの新しい TAP (タスク非同期プログラミング) メソッドによって受け入れられます。It will be honored by newer TAP (Task Asynchronous Programming) methods such as ExecuteReaderAsync.

コンテキスト接続に対してコマンドが実行された場合、CommandTimeout は無効になります (接続文字列で "context connection = true" を使用して開いた SqlConnection)。CommandTimeout has no effect when the command is executed against a context connection (a SqlConnection opened with "context connection=true" in the connection string).


このプロパティは、コマンドの実行時または結果の処理中にすべてのネットワーク読み取りを行うために、(メソッドの呼び出し中に読み取られるすべてのネットワークパケットの) 累積タイムアウトです。This property is the cumulative time-out (for all network packets that are read during the invocation of a method) for all network reads during command execution or processing of the results. 最初の行が返された後もタイムアウトが発生する可能性があり、ユーザーの処理時間は含まれず、ネットワークの読み取り時間のみです。A time-out can still occur after the first row is returned, and does not include user processing time, only network read time.

たとえば、30秒のタイムアウトの場合、Read に2つのネットワークパケットが必要な場合は、両方のネットワークパケットを読み取るのに30秒かかります。For example, with a 30 second time out, if Read requires two network packets, then it has 30 seconds to read both network packets. Read を再度呼び出すと、必要なデータの読み取りに30秒がかかります。If you call Read again, it will have another 30 seconds to read any data that it requires.

using System;  
using System.Data.SqlClient;  
public class A {  
   public static void Main() {  
      string connectionString = "";  
      // Wait for 5 second delay in the command  
      string queryString = "waitfor delay '00:00:05'";  
      using (SqlConnection connection = new SqlConnection(connectionString)) {  
         SqlCommand command = new SqlCommand(queryString, connection);  
         // Setting command timeout to 1 second  
         command.CommandTimeout = 1;  
         try {  
         catch (SqlException e) {  
            Console.WriteLine("Got expected SqlException due to command timeout ");