sqlCom.CommandTimeout = 60;
意味
CommandTimeout:コマンド実行のタイムアウト時間、単位:秒
- 既定値:30秒
- サンプルでは60に設定 → SQL実行が60秒以内に完了しない場合、タイムアウト例外が発生します
2種類のタイムアウトを混同しないよう注意
ConnectionTimeout:接続文字列内に設定、データベース接続確立のタイムアウト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)
注意点
- 負数は指定できません。0は無限待ちを意味します(推奨しない、アプリがフリーズする恐れあり)
- 現在の
SqlCommandインスタンスにだけ適用され、グローバル設定ではありません - ストアドプロシージャの実行に時間がかかる場合、この値を大きくします。
業務ではまず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
Previous: SqlCommand
Next: 実行の最適化とパラメータ受け渡し