3

プロジェクトでは、ローカル データベースを使用しています (データグリッドを使用してデータを表示しています) が、問題は、挿入クエリを使用してデータベースに挿入すると、挿入が持続しないことです。つまり、アプリケーションを再実行すると、データベースは変更されず、変更はデータベース ビュー (Visual Studio でテーブル データを表示) に反映されません。

挿入クエリは次のとおりです。

string dbCon = new     System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\MyDatabase.sdf";
        SqlCeConnection dbconnection = new SqlCeConnection("datasource=" + dbCon);

        dbconnection.Open();

        String Insert = "insert into MainTable(LineID,Date,Connection_Type)  Values('5','5/8/2012','commercial')";
SqlCeCommand cmd = new SqlCeCommand(Insert, dbconnection);

        //// Execute the command
        cmd.ExecuteNonQuery();

        dbconnection.Close();

このコードを実行すると、データグリッドが更新されますが、変更は永続的ではありません。私が間違っているのは何ですか?Visual Studio 2010 Ultimate と Windows 7 を使用しています

4

2 に答える 2

0

アプリケーションはどのフォルダーで実行されていますか?プログラムファイルツリーにある場合は、sdfファイルへの書き込み権限がない可能性があります(特に、 UACをオフにしている場合、または実行前にアプリを昇格させている場合を除き、Windows 7の場合)。

それが短期的な問題ではない場合でも、AppDataの場所の1つなど、sdfファイルの別の場所を見つけることをお勧めします。インストール場所に書き込めることを期待することは保証ではなく、アプリが展開される方法と場所によって異なります。

于 2012-05-08T13:03:51.847 に答える
0
  1. Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MyDatabase.sdf"アプリケーションフォルダーへのパスです。インストール オプションによっては、ファイルがそこにインストールされない場合があります。here"DataSource=|DataDirectory|\\MyDatabase.sdf;..."で説明されている接続文字列を使用します。

  2. 実際にデータがそこに保存されていても、ユーザーの権限によっては、ユーザーがそのディレクトリに書き込めない場合があります。また、ユーザーがアプリをアンインストールまたは更新すると、ユーザーのデータは削除されます。人々はそれが好きではありません。ユーザーが書き込み可能なフォルダーにデータをコピーする必要があります。以前のリンクは、その方法も示しています。

  3. プロジェクトの一部にデータベースを含む Visual Studio プロジェクトがある場合、[出力ディレクトリにコピー] プロパティが [コピー] に設定されている可能性があります。つまり、デバッガーで実行するたびに、ソース プロジェクトからコピーされた新しいデータベースが取得され、以前にあったものはすべて上書きされます。すべての変更は、元のソース データではなく、この一時的な出力フォルダーに保存されます。アプリを再度デバッグすると、一時コピーは削除されます。この回答の詳細な説明。

于 2012-12-21T23:35:17.570 に答える