2009-06-04 49 views
0

比方说,我有我的客户端应用程序,它连接到MySQL服务器。太棒了。我不把它作为一个线程来实现。我只是利用MySQLConnection类。如果与MySQL服务器的连接丢失,是否可以创建事件并处理它?

现在让我们假设Jim对于办公室不小心重新启动MySQL服务器而不事先征得许可。

我想知道何时发生断开连接,因此客户端应用程序知道并且用户没有收到很多错误。

我可以想一些方法来检查这一点,但我不知道他们是否会工作,即使他们在设计上很优雅。我想知道你们认为最合适的方式。

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

任何帮助是非常赞赏。

编辑:此问题已在评论中回答。谢谢阅读。

+1

安德鲁,我认为保持连接打开是一个不好的做法,你应该打开/关闭每个操作 – tekBlues 2009-06-04 12:18:47

+0

哈哈,真棒。我一直认为只要你使用它,连接就应该保持打开,并且不要忘记在最后关闭它。我喜欢这个网站。 – 2009-06-04 12:21:38

+0

@tekBlues - 出于性能方面的原因,如果他们非常忙碌,有时候保持开放连接是很好的。 – 2009-06-04 12:22:03

回答

0

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