Ich habe die folgende Methode innerhalb class DBConnection
. Ich rufe die Methode so auf: SQLiteConnection conn = DBConnection.OpenDB();
wenn ich eine Verbindung öffnen möchte, damit ich meine Abfragen ausführen kann. Ich kann eine ähnliche Methode aufrufen, wenn ich die Verbindung schließen möchte.SQLite-Verbindung fehlschlagen, wenn Datenbank fehlt? (gelöscht/verschoben)
Die Methode:
public static SQLiteConnection OpenDB()
{
try
{
//Gets connectionstring from app.config
string myConnectString =
ConfigurationManager.ConnectionStrings[
"LegMedSQLLite.Properties.Settings.LegMedSQLLiteDBConnectionString"].ConnectionString;
var conn = new SQLiteConnection(myConnectString);
conn.Open();
return conn;
}
catch (SQLiteException e)
{
MessageBox.Show(e.ToString(), "TEST");
return null;
}
}
Das alles funktioniert gut und schön. Das Problem ist jedoch der Versuch zu fangen. Stellen wir uns das folgende Szenario vor:
- Die Datenbankdatei wurde verschoben/löschen.
Die Ausnahme wird niemals ausgelöst. Der erste Haken, auf den ich stoße, ist der, wenn ich meine erste Abfrage ausfühle - wo sie feststellt, dass es keine solchen Tabellen gibt und sie ihre eigene Ausnahme auslöst. Ich war von diesem seltsamen Phänomen betäubt, aber ich fand bald heraus, dass SQLite eine neue leere Datenbank erstellt. Mit leer ist meine keine Tabellen, nichts, nur eine SQLite-Datenbank-Datei mit dem gleichen Namen wie die alte Datenbank, die da sein sollte.
Dies ist ein Problem, ich möchte die Anwendung wissen, wenn etwas falsch ist (Datenbank nicht gefunden, beschädigt, durch einen anderen Prozess usw. verwendet), sobald ich versuche, SQLiteConnection conn = DBConnection.OpenDB();
aufrufen.
Natürlich könnte ich versuchen, eine Datei.Exists in meiner Methode aufrufen, aber das scheint nicht eine richtige Lösung. Irgendeine Hilfe?
Ja, ich dachte, dass es so gut war! Aber es scheint nicht nur System.Data.SQLite, die dies tut. Ich weiß, dass der SQLite-Webserver dasselbe tut. Ich habe auch an die SQL-Abfrage Idee gedacht, aber es scheint nur so eine Verschwendung. Ich werde Ihre Antwort definitiv als akzeptierte Antwort bezeichnen, wenn es keinen "richtigen" Weg gibt, dies zu tun. – CasperT