我里面有以下方法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;
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,花花公子.问题是尝试捕获.让我们想象以下场景:
永远不会抛出异常.实际上,我偶然发现的第一个问题是当我执行我的第一个查询时 - 它认为没有这样的表,它会抛出自己的异常.我被这种奇怪的现象震惊了,但我很快发现SQLite创建了一个新的 空数据库.空是意味着没有表,没有,只是一个SQLT数据库文件与旧数据库同名,应该在那里.
这是一个问题,我希望应用程序在我尝试调用时立即知道是否存在错误(数据库未找到,已损坏,被其他进程使用等)SQLiteConnection conn = DBConnection.OpenDB();.
当然,我可以尝试在我的方法中调用File.Exists,但这似乎不是一个合适的解决方案.有帮助吗?
Ste*_*ngs 19
至少在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
Run Code Online (Sandbox Code Playgroud)
有关另一个示例,请参阅SQLite连接字符串示例,查找"禁用创建数据库行为".