我里面有以下方法class DBConnection
.我调用这样的方法:SQLiteConnection conn = DBConnection.OpenDB();
当我想打开一个连接时,我可以执行我的查询.当我想关闭连接时,我可以调用类似的方法.
方法:
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; } }
这一切都很好,花花公子.问题是尝试捕获.让我们想象以下场景:
数据库文件已被移动/删除.
永远不会抛出异常.实际上,我偶然发现的第一个问题是当我执行我的第一个查询时 - 它认为没有这样的表,它会抛出自己的异常.我被这种奇怪的现象震惊了,但我很快发现SQLite创建了一个新的 空数据库.空是意味着没有表,没有,只是一个SQLT数据库文件与旧数据库同名,应该在那里.
这是一个问题,我希望应用程序在我尝试调用时立即知道是否存在错误(数据库未找到,已损坏,被其他进程使用等)SQLiteConnection conn = DBConnection.OpenDB();
.
当然,我可以尝试在我的方法中调用File.Exists,但这似乎不是一个合适的解决方案.有帮助吗?
至少在System.Data.SQLite中,您可以FailIfMissing=True
在连接字符串中添加" ". 如果数据库文件不存在,SQLiteConnection.Open()
将抛出一个SQLiteException
.
string ConnectString = "Data Source=file.sdb; FailIfMissing=True"; DbConnection db = new SQLiteConnection(ConnectString); db.Open(); // Fails if file.sdb does not exist
有关另一个示例,请参阅SQLite连接字符串示例,查找"禁用创建数据库行为".