如果与MySQL服务器的连接丢失,是否可以创建事件并处理它?

时间:2009-06-04 12:16:48

标签: c# mysql multithreading event-handling disconnection

假设我有我的客户端应用程序,它与MySQL服务器建立连接。太棒了。我没有把它作为一个线程来实现。我只使用MySQLConnection类。

现在让我们说吉姆对办公室真的不小心意外地重新启动MySQL服务器而没有先征得许可。

我想知道断开连接的时间,以便客户端应用程序知道并且用户不会收到很多错误。

我可以想出几种方法来检查这个,但我不知道它们是否会起作用,即使它们在设计上很优雅。我想知道你们所认为的最合适的方式。

  • 将连接实现为线程并每x秒检查一次(如果可能的话)
  • 在连接断开时创建并处理事件(有点依赖于上述点)
  • 也许MySQL连接器库中内置了一个我甚至不知道的事件
  • 其他一些我不知道的神秘黑暗代码

非常感谢任何帮助。

修改:此问题已在评论中得到解答。谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

我有一个“偶尔连接”的应用程序并遇到了这个问题。我需要知道用户是否有网络连接,如果他们有,他们是否有VPN连接,允许他们连接到SQL Server数据库。我使用计时器每分钟一次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;
    }