アプリケーションのデータベース接続に問題があります。私のアプリケーションは一部のデータを mysql データベースに保存しましたが、タイトルに記載されているエラーが発生しました。
問題は次のとおりです。この例外をスローするメソッドを呼び出す直前に、データベースに接続する別のメソッドを呼び出しますが、成功します。最初は私のソースにエラーがあると思いましたが、エラーはありません。
悪い方法は次のとおりです。
public static bool checkExistence(object obj)
{
MySqlCommand checkQuery = new MySqlCommand(MySQLQueries.getCheckQueryByObject(obj), connection);
object checkResult = null;
if (connection.State == System.Data.ConnectionState.Closed)
{
OpenConnection();
try
{
checkResult = checkQuery.ExecuteScalar();
}
catch (MySqlException ex)
{
ErrorHandler(ex);
return true;
}
catch (Exception ex)
{
ErrorHandler(ex);
return true;
}
finally
{
CloseConnection();
}
}
else
{
checkResult = checkQuery.ExecuteScalar();
}
if (checkResult != null)
return true;
else
return false;
}
ご覧のとおり、まずオブジェクトが存在するかどうかを後でチェックする新しいコマンドを作成します。クエリの結果は に格納されobject checkResult
、最後に if を確認するだけですcheckResult == null
。の開閉に問題があるためconnection
、接続が開いているかどうかを確認することにしました。不正なメソッドが呼び出されると、接続が閉じられます。次に、呼び出しOpenConnection()
た後、以前と同じ設定で接続が再び開かれます。アプリケーションが実行されるとすぐにcheckResult = checkQuery.ExecuteScalar();
、例外がスローされます。
私は実際に何が問題なのか本当にわかりません。私の観点から接続が有効であることを確認するためconnection
に、ウォッチリストに入れ、アプリケーションによって行われたすべての変更を追跡しました。データベースを正常に使用した他の方法と何ら変わりはありませんでした。
私の友人は、アプリケーションのビルド中に一種の最適化エラーが発生する可能性があると言いました。彼自身は C# を使用していませんが、C を使用することもあるため、漠然とした推測にすぎません。
私が見逃したコードに何かエラーがあるのでしょうか、それともなぜこれが起こるのか推測できますか?
前もって感謝します!グリーツ
編集:MySQLのC#コネクタの最新バージョンを使用しています