3

私はSQLiteの初心者です。今、サンプルのノースウィンド データベースに新しいレコードを挿入しようとしています。私のC#コードは以下の通りです:

       SQLiteConnection myConnection = new SQLiteConnection();

        myConnection.ConnectionString = @"Data Source=|DataDirectory|\northwindEF.db";

        using (myConnection)
        {
            SQLiteCommand myCommand = myConnection.CreateCommand();
            myCommand.CommandText = "INSERT INTO Categories(CategoryID,CategoryName,Description) VALUES(11,'Bakery','Baked goods such as bread and cakes')";
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();
        }

このプログラムを実行すると、エラーは発生しませんでした。しかし、私の新しいレコードはテーブルに挿入されません。私のコードの何が問題なのですか。私を助けてください。

4

3 に答える 3

5

これはよくある落とし穴です。サーバー エクスプローラーでの接続は、プロジェクト フォルダーに格納されているデータベース ファイルに構築されます。次に、実行時にデータベースが出力ディレクトリにコピーされ、すべての挿入、更新、削除がそのデータベースに対して機能します。データベースが異なるため、サーバー エクスプローラーでは何も変わりません。'Copy to the output directory'プロパティが に設定されている場合も同様Copy alwaysです。この場合、実行のたびに、出力ディレクトリのデータベースがプロジェクトのルート フォルダーから取得された新しいコピーで上書きされ、すべての削除、更新、または挿入が次回の実行時に消えます。

于 2013-03-20T23:07:51.710 に答える
0

なぜ「新しいレコードが挿入されていない」と思いますか? ExecuteNonQuery影響を受けたレコードの数がわかります。それは何を返しますか?

どのようにプログラムを実行していますか? デバッガから?DataDirectoryデータがインストールされたフォルダです。.sdf ファイルのプロジェクト プロパティを変更していない場合、Visual Studio はデータを project\debug\bin\ フォルダーにインストールします。そこで .sdf ファイルを探します。「新しいレコード」はありますか?

于 2013-03-20T23:06:12.280 に答える