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.csViewModels文件夹内,但我不知道如何使其指向根目录中的特定数据库文件,如果这甚至是问题。

问题/解决方案是什么?我试着寻找答案,但所有的问题都是用"问题的可能原因"来回答的,所以它们并没有真正的帮助。

SQLite找不到表

在使用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");