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でエラーが発生ししている可能性があります。
以下の対策があります。