SQLite找不到表
本文关键字:找不到 SQLite | 更新日期: 2023-09-27 18:13:50
我在App.xaml.cs中有这个代码:
private SQLiteConnection dbCon;
public void App_Startup(object sender, StartupEventArgs e)
{
SQLiteConnection.CreateFile("testdb.sqlite");
dbCon = new SQLiteConnection("Data Source=testdb.sqlite;Version=3;");
dbCon.Open();
string query = "create table if not exists Settings(Key nvarchar(max), Value nvarchar(max));";
SQLiteCommand command = new SQLiteCommand(query, dbCon);
command.ExecuteNonQuery();
}
这个运行得很好…然后在shellviewmodel。cs中我有这个:
public ShellViewModel()
{
dbCon = new SQLiteConnection("Data Source=testdb.sqlite;Version=3;");
dbCon.Open();
string query = "Select Value from Settings where (Key = 'isFirstTime')";
SQLiteCommand command = new SQLiteCommand(query, dbCon);
command.ExecuteNonQuery();
//if(no information or first time)
// show registerationview.xaml
//else
this.ActivateItem(new MainViewModel()); // show main view.
}
问题是我在上面的代码中得到"Table not found"。
我能想到的唯一原因是App.xaml.cs
在项目的根目录中,而ShellViewModel.cs
在ViewModels
文件夹内,但我不知道如何使其指向根目录中的特定数据库文件,如果这甚至是问题。
问题/解决方案是什么?我试着寻找答案,但所有的问题都是用"问题的可能原因"来回答的,所以它们并没有真正的帮助。
在使用SQLite数据库的所有位置使用全路径
string fullPath = Path.Combine(ApplicationDataBaseFolderPath, "testdb.sqlite");
SQLiteConnection.CreateFile(fullPath);
和
dbCon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", fullPath));
您可以使用"从WPF应用程序SO获取应用程序's目录"问题的答案之一,找到应用程序目录,然后将其与数据库应该位于的文件夹名称结合起来。
string ApplicationDataBaseFolderPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "AppData");