views:

57

answers:

1

Let's say I have my client application and it makes a connection to the MySQL server. Fantastic. I don't implement this as a thread. I just utilise the MySQLConnection class.

And now let's say Jim who's really careless about the office accidently reboots the MySQL server without asking permission first.

I want to know when the disconnection happens so the client application is aware and the user doesn't get a lot of errors.

I can think of a few ways to check this but I don't know if they'll work and even if they're elegant in design. I was wondering what you folks thought was the most appropriate way.

  • Implement the connection as a thread and check it every x seconds (if it's even possible)
  • Create and handle an event when the connection drops (sort of relies on the point above)
  • Maybe there's a event built into the MySQL Connector library that I'm not even aware of
  • Some other mystical dark code that I'm not aware of

Any help is very much appreciated.

Edit: This question has been answered in comments. Thanks for reading.

A: 

I have an "occasionally connected" application and faced this problem. I needed to know if the user had a network connection and, if they did, if they had a VPN connection that would allow them to connect to the SQL Server database. I used a timer to ping the database server once a minute to check its reachability.

    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;
    }
Jamie Ide