原因不明のSqlCommandのタイムアウトが発生する

SqlCommandで原因不明のタイムアウトが発生する現象について紹介します。

現象

SqlCommandを利用するプログラムで特に重い処理を実行していないにもかかわらず、SqlCommandのタイムアウトが発生します。

コード例

下記のコードで問題が発生します。

SqlConnection con1 = CreateMSSQLConnection();
SqlConnection con2 = CreateMSSQLConnection();

con1.open();
con2.open();
SqlCommand com1 = new SqlCommand(sql1,con1);
SqlDataReader sdr = com1.ExecuteReader();
while (sdr.Read()==true){
  string sql2 = "(com1の結果をもとにしたSQL)"
  SqlCommand com2 = new SqlCommand(sql2,con2);
  
  com2.ExecuteNonQuery();//←ここでタイムアウトエラー
  com2.Dispose();
}

con2.close();
con2.Dispose();

com1.dispose();
con1.close();
con1.Dispose();

原因

com2.ExecuteNonQuery(); でタイムアウトエラーが発生しますが、com2のSQLには一見問題が無いように見受けられます。 原因として考えられるのはcom1がタイムアウトしたためにcom2のExecuteNonQueryでエラーが発生ししている可能性があります。

対策

以下の対策があります。

  • 入れ子でSqlCommandを実行せずに、いったんリスト等に情報を格納してからcom2を実行する
  • com1のCommandTimeoutの値を大きくする
  • con1のConnectionTimeoutの値を大きくする


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2009-10-30
Copyright © 1995–2025 iPentec all rights reserverd.