我在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.
}
问题是我在上面的代码中找到了“找不到表”。
我能想到的唯一原因是App.xaml.cs
位于项目的根目录中,而ShellViewModel.cs
位于ViewModels
文件夹中,但我没有想法如何使它指向根目录中的特定数据库文件,如果这甚至是问题。
问题/解决方案是什么? 我试着找到答案,但所有的问题都得到了“问题的可能原因”的回答,所以他们并没有真正帮助。
答案 0 :(得分:0)
在使用SQLite数据库的所有位置使用完整路径,如下所示
string fullPath = Path.Combine(ApplicationDataBaseFolderPath, "testdb.sqlite");
SQLiteConnection.CreateFile(fullPath);
并且
dbCon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", fullPath));
您可以使用Getting the application's directory from a WPF application SO问题的答案之一找到应用程序目录,然后将其与数据库应找到的文件夹名称相结合。
string ApplicationDataBaseFolderPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "AppData");