我想检测连接状态到MySql数据库。我的数据库部署在与我的应用程序不同的服务器上,并且很有可能通过网络失去与它的连接。所以我必须考虑这种情况。处理连接到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异常:无法写入数据传输到传输连接: 建立的连接被主机 机器中的软件中止。
我期待MySqlException
被解雇,但事实并非如此。 此外,如果与MySql的连接恢复,我仍然可以获得IOException
而不是执行查询。似乎,MySqlConnection
对象尚未更新,它不关心新的连接状态。
- 什么是处理连接丢失异常的最佳方法?
- 如何在连接恢复时刷新
MySqlConnection
?
注:,我不能实例为每个新查询的新MySqlConnection
对象,因为我想改变程序具有只初始化一次MySqlConnection
类型的辛格尔顿。我知道这是一个糟糕的设计,但我现在不想改变这种设计。我只想抓住连接丢失的异常并尝试刷新MySqlConnection
以继续正常工作。
所以我唯一的选择是改变我的设计,并为每个数据库交互创建新的MySqlConnection实例? – Mhd