Ich möchte Verbindungsstatus zu MySql-Datenbank erkennen. Meine Datenbank wird auf einem anderen Server als meiner App bereitgestellt, und es bestehen gute Chancen, die Verbindung zu ihr über das Netzwerk zu verlieren. Also muss ich dieses Szenario in Betracht ziehen.Handle Verbindung zu MySql verloren
Hier ist, was ich bisher versucht (ein vereinfachtes Testbeispiel):
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();
}
Wenn die Verbindung zum MySql verloren geht, habe ich eine allgemeine Ausnahme:
IOException: Kann nicht schreiben Daten zur Transportverbindung: Eine eingerichtete Verbindung wurde von der Software in Ihrem Rechner abgebrochen.
Ich habe erwartet, dass MySqlException
gefeuert werden, aber das war nicht der Fall. Auch wenn die Verbindung zu MySql wiederhergestellt wird, bekomme ich immer noch die IOException
statt die Abfrage auszuführen. Scheint wie, MySqlConnection
Objekt wurde nicht aktualisiert und es ist nicht wichtig, neue Verbindungsstatus.
- Was ist der beste Weg, Verbindung verlorene Ausnahme zu behandeln?
- Wie kann ich
MySqlConnection
aktualisieren, wenn die Verbindung wiederhergestellt wird?
Hinweis:, dass ich nicht ein neues MySqlConnection
Objekt für jede neue Abfrage instanziieren kann, weil das Programm, das ich MySqlConnection
hat eine Singleton von Typ zu ändern bin versucht, die nur einmal initialisiert wird. Ich weiß, das ist ein schlechtes Design, aber ich möchte dieses Design jetzt nicht ändern. Ich möchte nur Verbindung verlorene Ausnahme fangen und versuchen, MySqlConnection
zu aktualisieren, um weiterhin ordnungsgemäß zu funktionieren.
Also meine einzige Option hier ist mein Design zu ändern und neue "MySqlConnection" -Instanz für jede Datenbankinteraktion zu erstellen? – Mhd