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.cs、フォルダ内にあるという事実ですが、ルート ディレクトリ内のViewModels特定のデータベース ファイルを指すようにする方法がわかりません。問題さえ。

問題/解決策は何ですか? 答えを見つけようとしましたが、すべての質問に「問題の考えられる原因」が回答されていたため、あまり役に立ちません。

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));

Get the application's directory from a WPF application SO Questionの回答の1つを使用して、アプリケーションディレクトリを見つけ、それをデータベースが配置されるフォルダー名と組み合わせることができます。

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