原子的に保証する方法がないことを認識しています:
if(hasInternet)
doDatabaseCall();
しかし、.NET の世界で DbConnection および DbCommand オブジェクトを処理するときに接続の問題を処理する正しい方法は何ですか? 特に MySqlConnection および MySqlCommand オブジェクトに興味がありますが、その例外のパターンは SQL Server のクラスと同じであると想定 (希望) します。
conn.Open() を呼び出す前にインターネットがダウンすると、MySqlException が発生すると思います。また、ExecuteReader または ExecuteNonQuery を呼び出してインターネットがダウンした場合も、同じことが起こると思います。
MySql オブジェクトのドキュメントに記載がないため、わかりません。SqlServer オブジェクトは、次のことを意味する SqlException を発生させる可能性があると言っているだけです。
ロックされた行に対してコマンドを実行中に例外が発生しました。Microsoft .NET Framework バージョン 1.0 を使用している場合、この例外は生成されません。
それは接続の問題をカバーしていないようです... 私がやりたいのは、例外を処理し、しばらく待ってから、最初からやり直すことです。私のアプリケーションの唯一の目的は、これらのデータベース呼び出しを実行し、専用システムで実行することなので、永遠に再試行することが本当に最善の選択肢であると私は信じています。そうは言っても、接続例外と他の種類のデータベース例外を区別したいのですが、それは可能ですか?
いくつかのテストを行ったところ、想定どおりに動作しているように見えますが、すべてのエッジ ケースで動作しますか? コマンドはデータベース サーバーに正常に送信されましたが、結果が返される前または返されている間に接続が切断されましたか? すべてのエッジケースで機能しない場合は、コマンドを実行し、目的の状態変更を照会し、次のコマンドを実行する必要があります。各コマンドが通過することが重要です。
違いがある場合は、SSH経由でリモートサーバーに転送されるlocalhostのポートに接続しています。