2009-06-04 3 views
0

私のクライアントアプリケーションを持っていて、MySQLサーバに接続しているとします。素晴らしい。私はこれをスレッドとして実装していません。私はMySQLConnectionクラスを利用しています。MySQLサーバへの接続が失われた場合、イベントを作成して処理することは可能ですか?

ここでは、事実上不注意なJimが、最初に許可を求めずにMySQLサーバーを誤ってリブートするとします。

接続が切断されたときにクライアントアプリケーションが認識し、ユーザーが多くのエラーを受け取らないようにするために知りたいことがあります。

これを確認するにはいくつかの方法が考えられますが、デザインがエレガントであっても機能するかどうかはわかりません。私はあなた方が最も適切な方法だと思っていたものが不思議でした。

  • (それも可能だ場合)、スレッドなどの接続を実装し、それをx秒ごとにチェック
  • 接続が低下したときにイベントを作成し、ハンドル(ソートの上記の点に依存している)
  • たぶんあります私も、私は

任意の助けを認識していないよという

  • 他のいくつかの神秘的な暗黒のコードを認識していないよMySQLのコネクター・ライブラリーに組み込まれたイベントは、非常に高く評価されます。

    :この質問はコメントで回答されています。読んでくれてありがとう。

  • +1

    アンドリューは、私がオープン接続を維持することは悪い習慣だと思い、あなたは/、母、すべての操作 – tekBlues

    +0

    のためにそれを閉じる素晴らしい開く必要があります。私はいつもあなたが使っている限り、接続を開いたままにしておき、最後にそれを閉じることを忘れないでください。私はこのサイトが大好きです。 –

    +0

    @tekBlues - パフォーマンスの理由から、非常に混雑していると開いている接続を維持することが良いこともあります。 –

    答えて

    0

    私は「時折接続された」アプリケーションがあり、この問題に直面しました。私は、ユーザーがネットワーク接続を持っているかどうかを知る必要がありました。もしそうであれば、SQL Serverデータベースに接続できるVPN接続があるかどうかを知る必要がありました。私はタイマーを使用してデータベースサーバに1分に1回pingをかけ、到達可能性を確認しました。

    public NetworkStatus GetNetworkStatus() 
        { 
         NetworkStatus netStatus = new NetworkStatus(); 
         netStatus.NetworkAvailable = NetworkInterface.GetIsNetworkAvailable(); 
    
         try 
         { 
          if (netStatus.NetworkAvailable) 
          { 
           Ping p = new Ping(); 
           // Create a buffer of 32 bytes of data to be transmitted. 
           string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
           byte[] buffer = Encoding.ASCII.GetBytes(data); 
           PingReply reply = p.Send(DB_SERVER_NAME, 1200, buffer); 
           netStatus.PublisherPingSuccess = reply.Status == IPStatus.Success; 
          } 
         } 
         catch (Exception ex) 
         { 
          netStatus.PublisherPingSuccess = false; 
          netStatus.Error = ex; 
         } 
         return netStatus; 
        } 
    
    関連する問題