SQLite找不到表

时间:2013-05-15 17:00:30

标签: c# wpf sqlite mvvm

我在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文件夹中,但我没有想法如何使它指向根目录中的特定数据库文件,如果这甚至是问题。

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

1 个答案:

答案 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");