如果与MySQL服务器的连接丢失,是否可以创建事件并处理它?
问题描述:
比方说,我有我的客户端应用程序,它连接到MySQL服务器。太棒了。我不把它作为一个线程来实现。我只是利用MySQLConnection类。如果与MySQL服务器的连接丢失,是否可以创建事件并处理它?
现在让我们假设Jim对于办公室不小心重新启动MySQL服务器而不事先征得许可。
我想知道何时发生断开连接,因此客户端应用程序知道并且用户没有收到很多错误。
我可以想一些方法来检查这一点,但我不知道他们是否会工作,即使他们在设计上很优雅。我想知道你们认为最合适的方式。
- 实现连接作为一个线程,并检查它每x秒(如果它甚至有可能)
- 创建并在连接断开处理事件(在某种程度上依赖于点以上)
- 也许有内置到MySQL连接库中的事件,我甚至不知道
- 其他一些神秘的黑暗的代码,我不知道的
任何帮助是非常赞赏。
编辑:此问题已在评论中回答。谢谢阅读。
答
我有一个“偶尔连接”的应用程序,并面临这个问题。我需要知道用户是否有网络连接,以及他们是否拥有允许他们连接到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;
}
安德鲁,我认为保持连接打开是一个不好的做法,你应该打开/关闭每个操作 – tekBlues 2009-06-04 12:18:47
哈哈,真棒。我一直认为只要你使用它,连接就应该保持打开,并且不要忘记在最后关闭它。我喜欢这个网站。 – 2009-06-04 12:21:38
@tekBlues - 出于性能方面的原因,如果他们非常忙碌,有时候保持开放连接是很好的。 – 2009-06-04 12:22:03