MySqlデータベースへの接続状態を検出したいと思います。私のデータベースは私のアプリケーションとは別のサーバーに配備されており、ネットワーク経由で接続を失う可能性があります。だから私はこのシナリオを考慮に入れなければならない。ここでMySqlへのハンドル接続が失われました
は(単純化した試験例)私がこれまで試したものです:
にIOException:
static string connectionString = "***"; public static MySqlConnection Connection; static System.Timers.Timer _timer; static void _timer_Elapsed(object sender, ElapsedEventArgs e) { try { if (Connection.State != System.Data.ConnectionState.Open) Connection.Open(); // Call method to invoke MySqlCommand.ExecuteNonQuery mysqlCommand.ExecuteNonQuery(); } catch (MySqlException ex) { Console.WriteLine("SQL EXCEPTION: " + ex); // Handle all type of database exceptions switch(ex.Number) {...} } catch (Exception ex) { Console.WriteLine("OTHER EXCEPTION: " + ex); } } static void Main(string[] args) { Connection = new MySqlConnection(connectionString); _timer = new System.Timers.Timer(3000); _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed); _timer.Enabled = true; Console.ReadKey(); }
MySQLへの接続が失われた場合、私は一般的な例外を得書き込むことができません転送接続へのデータ: 確立された接続は、ホスト マシンのソフトウェアによって中断されました。
私はMySqlException
が解雇されると予想していましたが、そうではありませんでした。 また、MySqlへの接続が復元されても、クエリを実行する代わりにまだIOException
が返されます。のように、MySqlConnection
オブジェクトは更新されていないし、新しい接続状態を気にしません。
- 接続失われた例外を処理する最善の方法は何ですか?
- 接続が復元されると、
MySqlConnection
をどのように更新できますか?
注:私は変更しようとしているプログラムは一度だけ初期化されているタイプMySqlConnection
のシングルトンを持っているので、私は、それぞれの新しいクエリのための新しいMySqlConnection
オブジェクトをインスタンス化することはできません。私はそれが悪いデザインだと知っていますが、私は今このデザインを変更したくありません。私はちょうど接続が失われた例外をキャッチし、正しく動作させるためにMySqlConnection
をリフレッシュしようとします。
私の唯一の選択肢は、私のデザインを変更し、すべてのデータベースの相互作用のための新しい 'MySqlConnection'インスタンスを作成することです。 – Mhd