CommandTimeout

sqlCom.CommandTimeout = 60;

意味

CommandTimeoutコマンド実行のタイムアウト時間、単位:秒

  • 既定値:30秒
  • サンプルでは60に設定 → SQL実行が60秒以内に完了しない場合、タイムアウト例外が発生します
    2種類のタイムアウトを混同しないよう注意
  1. ConnectionTimeout:接続文字列内に設定、データベース接続確立のタイムアウト
  2. CommandTimeout:接続成功後に有効、SQL文実行待ちのタイムアウト

完全なサンプルコード

private void button1_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=.;Initial Catalog=db;User ID=sa;pwd=xxx";
    // using により SqlConnection リソースを自動解放
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        SqlCommand sqlCom = new SqlCommand();
        // 接続を紐付け(どちらの書き方でも可)
        sqlCom.Connection = conn;

        sqlCom.CommandText = "select 1";
        // SQL実行タイムアウトを60秒に設定
        sqlCom.CommandTimeout = 60;

        object obj = sqlCom.ExecuteScalar();
        MessageBox.Show(obj.ToString());
    }
    // usingブロック終了時、connは自動で閉じられ解放される。手動でconn.Close()を呼ぶ必要なし
}Code language: JavaScript (javascript)

注意点

  1. 負数は指定できません。0は無限待ちを意味します(推奨しない、アプリがフリーズする恐れあり)
  2. 現在のSqlCommandインスタンスにだけ適用され、グローバル設定ではありません
  3. ストアドプロシージャの実行に時間がかかる場合、この値を大きくします。
    業務ではまずSQLの最適化を優先し、単純にタイムアウトだけ増やさないでください。

簡略初期化記述(オブジェクト初期化子)

SqlCommand sqlCom = new SqlCommand("select 1", conn)
{
    CommandTimeout = 60
};Code language: JavaScript (javascript)

接続タイムアウトの設定

接続文字列内に記述し、CommandTimeoutとは独立して動作します:

Data Source=.;Initial Catalog=db;User ID=sa;Password=xxx;Connect Timeout=15

Connect Timeout=15 → データベース接続試行の最大待ち時間は15秒。

CommandTimeout

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です