私は、最新の安定したMySql Connector/NET 6.5.4.0を使用しています。接続状態MySql Connector/NET
私はMySQLデータベースへの接続を開きます。 C#コードでは、Connection.State
プロパティはOpen
です。 私はいくつかの魔法のstufをやっていますが、私がそれをやっている間、私は接続サーバー側を殺します。しかし、コードでは、州はまだOpen
です。
セッションごとに静的変数(Dictionary)にデータベースクラスのインスタンスを保存するため、この問題が発生しました。 ユーザーがリクエストを行うと、この変数からデータベースクラスが取得され、クエリが実行されます。 ただし、接続がサーバー側を閉じると(sysadminによって強制終了され、待機タイムアウトが経過した)、状態は更新されません。
この問題の回避策はありますか?私の同僚は既にバグ報告を提出しています(http://bugs.mysql.com/bug.php?id=64991)。
実行前に閉じると開くことは、パフォーマンスには非常に悪いので、オプションはありません。
あなたは接続を見ましたか? falseの場合、接続は閉じられます。 http://dev.mysql.com/doc/refman/5.0/en/connector-net-ref-mysqlclient.html#connector-net-ref-mysqlclient-mysqlconnection-pingまた、次のStateChangeイベントに登録することもできます。何が起こっているかを確認する接続。一般的なアドバイスとして、接続を静的なメンバーとしてキャッシュしないでください。接続プーリングが有効になっている限り、接続のインスタンスを保持することで意味のあるパフォーマンスの向上は見られません。さらに、エロルが発生した場合はどうなりますか? – dash
この場合、接続プーリングはオフになっています。Pingメソッドを調べます。接続が閉じていると、「コマンド実行中に致命的なエラーが発生しました」というメッセージが表示されます。 –
Ping()メソッドは機能しますが、多くの時間がかかります(呼び出しごとに0.020秒)。 StateChangeイベントが遅すぎます(executeリーダーを呼び出すとき)。 –