C#でMySQLに接続して、とあるSelect文を投げたら
「Fatal error encountered during command execution.」
「Fatal error encountered attempting to read the resultset.」
こんなメッセージの例外が発生しました。
私の場合、対処方法がありましたのでご紹介いたします。
問題発生時のコード
例外発生時のソースコードは以下のような感じでした。
MySqlConnection mySqlConnection; // インスタンス生成に関して省略
DataTable table = new DataTable();
using (var command = mySqlConnection.CreateCommand())
{
try
{
// データベース接続
mySqlConnection.Open();
command.CommandText = sqlQuery; // SQL文は引数で受け取るように実装
var reader = command.ExecuteReader();
table.Load(reader);
reader.Close();
}
catch (Exception e)
{
// ログ出力
}
finally
{
// データベース切断
mySqlConnection.Close();
}
}
多少違えどオーソドックスな実装だと思います。
対処後のコード
対処は1行追加するだけで出来ました。
MySqlConnection mySqlConnection; // インスタンス生成に関して省略
DataTable table = new DataTable();
using (var command = mySqlConnection.CreateCommand())
{
try
{
// データベース接続
mySqlConnection.Open();
command.CommandText = sqlQuery; // SQL文は引数で受け取るように実装
command.CommandTimeout = 99999;
var reader = command.ExecuteReader();
table.Load(reader);
reader.Close();
}
catch (Exception e)
{
// ログ出力
}
finally
{
// データベース切断
mySqlConnection.Close();
}
}
考察
何が原因なのかはよく分かりません。
今回は、タイムアウト時間を設定したことで例外が発生しなくなりました。このことから、単に処理時間が掛かっているだけなのかな!?といったことしか言えません。
同じような例外でお困りの方は一度試してみると良いかも知れません。
コメント