Tengo el siguiente método dentro de class DBConnection
. Llamo al método de esta manera: SQLiteConnection conn = DBConnection.OpenDB();
cuando quiero abrir una conexión, para poder ejecutar mis consultas. Puedo llamar a un método similar cuando quiero cerrar la conexión.¿Ha fallado la conexión SQLite si falta la base de datos? (eliminado/movido)
El método:
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;
}
}
Todo esto funciona bien y dandy. El problema es el try-catch sin embargo. Imaginemos el siguiente escenario:
- El archivo de la base de datos ha sido movido/eliminar.
La excepción nunca se arrojará. En realidad, la primera trampa que encuentro es cuando ejecuto mi primera consulta, donde se da el caso de que no existe tal tabla (s) y arroja su propia excepción. Me sorprendió este extraño fenómeno, pero pronto descubrí que SQLite crea una nueva base de datos vacía . Por vacío significa sin tablas, nada, solo un archivo de base de datos SQLite con el mismo nombre que la antigua base de datos que se suponía que estaba allí.
Esto es un problema, quiero que la aplicación sepa si hay algún problema (base de datos no encontrada, dañado, usado por otro proceso, etc.) tan pronto como intento llamar al SQLiteConnection conn = DBConnection.OpenDB();
.
Naturalmente, podría intentar llamar a un archivo. Existe en mi método, pero eso no parece una solución adecuada. ¿Alguna ayuda?
Sí, pensé que era así! Pero no parece ser únicamente System.Data.SQLite que hace esto. Sé que los servidores web SQLite usan lo mismo. Además, también he pensado en la idea de la consulta SQL, pero parece un desperdicio. Definitivamente marcaré su respuesta como la respuesta aceptada, si no hay una forma "adecuada" de hacerlo. – CasperT