我正在尝试通过ac#WPF应用程序连接到本地.sqlite文件,并且已经构建了以下两种方法:
private SQLiteConnection dbConn;
public string dbPath()
{
dbConn = new SQLiteConnection(@"Data Source=C:\Users\ommited\file\path\ChinookSqlite.sqlite;");
return isConnected();
}
和isConnected()
方法:
public string isConnected()
{
try
{
dbConn.Open();
return "VALIDATED";
}
catch (Exception ex)
{
Console.WriteLine(ex);
return "FAILED";
}
}
然后,通过这两个方法通过MainWindow
WPF前端:
dbConnection myDB = new dbConnection();
public MainWindow()
{
InitializeComponent();
dbConnCheck.Content = myDB.dbPath();
}
我的问题是,如果更改显式文件路径字符串(位置,而不是文件名),则连接将无法验证。如果我更改了文件名(从ChinookSqlite.Sqlite
到dddddddChinookSqlite.sqlite
),即使文件名错误,它也会生效。
谁能提供一些有关为什么发生这种情况的建议?当不使用显式字符串时,无论如何,它将始终进行验证,我用来精确检查连接的最接近的方法是使用显式文件路径字符串。
提前致谢。
如果要检查连接状态,则不应使用try/catch
结构。你State
有财产。因此,您的isConnected
方法应类似于:
public bool isConnected()
{
if (dbConn != null && dbConn.State == ConnectionState.Open)
{
return true;
}
else
{
return false;
}
}
然后更改dbPath
方法。在SQLite中,您可以添加FailIfMissing=True
参数,如果缺少数据库文件,则会引发异常。否则,如果找不到该文件,则会创建一个新文件:
public string dbPath()
{
try
{
dbConn =
new SQLiteConnection(@"Data Source=C:\Users\ommited\file\path\ChinookSqlite.sqlite;
FailIfMissing=True");
if (!isConnected())
{
dbConn.Open();
}
}
catch (Exception ex)
{
//the database file does not exists..
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句