1

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

什么是问题/解决方案?我试图找到答案,但所有问题都以“问题的可能原因”得到了回答,所以它们并没有真正的帮助。

4

1 回答 1

0

在使用 SQLite 数据库的所有位置使用完整路径,如下所示

string fullPath = Path.Combine(ApplicationDataBaseFolderPath, "testdb.sqlite");

SQLiteConnection.CreateFile(fullPath);

dbCon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", fullPath));

您可以使用从 WPF 应用程序SO 问题获取应用程序目录的答案之一并找到应用程序目录,然后将其与数据库应位于的文件夹名称结合起来。

string ApplicationDataBaseFolderPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "AppData");
于 2013-05-15T17:25:28.120 回答