我想检测到MySql数据库的连接状态。我的数据库部署在与我的应用程序不同的服务器上,并且很有可能通过网络失去与它的连接。所以我必须考虑这种情况。
这是我到目前为止所尝试的(一个简化的测试示例):
static string connectionString = "***";
public static MySqlConnection Connection;
static System.Timers.Timer _timer;
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
if (Connection.State != System.Data.ConnectionState.Open)
Connection.Open();
// Call method to invoke MySqlCommand.ExecuteNonQuery
mysqlCommand.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Console.WriteLine("SQL EXCEPTION: " + ex);
// Handle all type of database exceptions
switch(ex.Number)
{...}
}
catch (Exception ex)
{
Console.WriteLine("OTHER EXCEPTION: " + ex);
}
}
static void Main(string[] args)
{
Connection = new MySqlConnection(connectionString);
_timer = new System.Timers.Timer(3000);
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true;
Console.ReadKey();
}如果与MySql的连接丢失,我得到一个一般的异常:
IOException : Unable to write data to the transport connection: An
established connection was aborted by the software in your host
machine.
我曾期待MySqlException被解雇,但事实并非如此。
此外,如果与MySql的连接恢复,我仍然会得到IOException而不是执行查询。看起来像MySqlConnection对象没有被更新,它不关心新的连接状态。
处理连接丢失异常的最佳方法是什么?
连线恢复后,如何刷新MySqlConnection?
注意:我无法为每个新查询实例化一个新的MySqlConnection对象,因为我试图更改的程序有一个MySqlConnection类型的Singleton,它只初始化一次。我知道这是一个糟糕的设计,但我现在不想改变这种设计。我只想捕获连接丢失的异常,并尝试刷新MySqlConnection以继续正常工作。