2009-06-04 3 views
0

Disons que j'ai mon application client et qu'elle établit une connexion avec le serveur MySQL. Fantastique. Je ne l'implémente pas comme un fil. J'utilise juste la classe MySQLConnection. Et maintenant, disons que Jim, qui ne se soucie pas du bureau, redémarre accidentellement le serveur MySQL sans demander d'abord l'autorisation.Est-il possible de créer un événement et de le gérer si la connexion à un serveur MySQL est perdue?

Je veux savoir quand la déconnexion se produit afin que l'application cliente soit au courant et que l'utilisateur ne reçoive pas beaucoup d'erreurs.

Je peux penser à quelques façons de vérifier cela, mais je ne sais pas si elles vont fonctionner et même si elles sont élégantes dans la conception. Je me demandais ce que vous pensiez être le moyen le plus approprié.

  • Mettre en oeuvre la connexion comme un fil et vérifiez toutes les x secondes (s'il est encore possible)
  • Créer et gérer un événement lorsque la connexion tombe (repose en quelque sorte sur le point ci-dessus)
  • Peut-être il y a un événement intégré dans la bibliothèque MySQL Connector que je ne suis pas au courant même de
  • Certains autre code sombre et mystique que je ne suis pas au courant de

Toute aide est très appréciée.

Modifier: Cette question a obtenu une réponse dans les commentaires. Merci d'avoir lu.

+1

Andrew, je pense que le maintien de la connexion ouverte est une mauvaise pratique, vous devez ouvrir/fermer pour chaque opération – tekBlues

+0

Haha, impressionnant. J'ai toujours pensé qu'une connexion devait rester ouverte tant que vous l'utilisiez, et n'oubliez pas de la fermer à la fin. J'aime ce site. –

+0

@tekBlues - parfois, il est bon de maintenir les connexions ouvertes si elles sont très occupées - pour des raisons de performances. –

Répondre

0

J'ai une application "occasionnellement connectée" et j'ai rencontré ce problème. J'avais besoin de savoir si l'utilisateur avait une connexion réseau et, si c'était le cas, s'il avait une connexion VPN qui lui permettrait de se connecter à la base de données SQL Server. J'ai utilisé une minuterie pour envoyer une requête ping au serveur de base de données une fois par minute pour vérifier son accessibilité.

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; 
    } 
Questions connexes