我想檢測連接狀態到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