2016-08-09 12 views
-1

C#を使い始めたばかりで、ローカルデータベースのデータセットのCRUDを作成しようとしています。私のプログラムを走らせれば、すべてがうまくいく。一度再起動すると、前回のセッションで入力したデータはすべて消えてしまいます。私はこれのような多くの記事を読んで、次のように入力すると言った:employeeDataSet.AcceptChanges(); それでもそれでもまだ動作しません、どんなアイデアですか?C#はデータを保存していますが、再起動時には消えてしまいました

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace LocalDatabaseApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

    private void employeeInfoBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
     this.Validate(); 
     this.employeeInfoBindingSource.EndEdit(); 
     this.tableAdapterManager.UpdateAll(this.employeeDataSet); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'employeeDataSet.EmployeeInfo' table. You can move, or remove it, as needed. 
     this.employeeInfoTableAdapter.Fill(this.employeeDataSet.EmployeeInfo); 

    } 

    private void addButton_Click(object sender, EventArgs e) 
    { 
     this.employeeInfoBindingSource.AddNew(); 
     employeeDataSet.AcceptChanges(); 
    } 

    private void saveButton_Click(object sender, EventArgs e) 
    { 
     this.Validate(); 
     this.employeeInfoBindingSource.EndEdit(); 
     this.tableAdapterManager.UpdateAll(this.employeeDataSet); 
     employeeDataSet.AcceptChanges(); 
    } 

    private void removeButton_Click(object sender, EventArgs e) 
    { 
     this.employeeInfoBindingSource.RemoveCurrent(); 
     employeeDataSet.AcceptChanges(); 
    } 
} 

}

スクリーンショットenter image description here

+0

"ローカルデータベース"について説明できますか?そのSQLコンパクト・エディションなのですか? –

+0

ビジュアルスタジオ2015のsqlLocalDbです。私はそのサービスデータベースと呼ばれています。ファイルの拡張子は.mdfです。さらに、フォームにデータソースを追加するときに、独自のボタンを使用するのか、元のデータソースコントロールボタンを使用するのかは関係ありません。どちらの場合も更新されません –

答えて

0

AcceptChangesバックデータベースにデータを格納しません。変更されたレコードを内部的に「変更なし」とマークします。データセット内の追加/削除/変更されたすべてのレコードの「ダーティ」フラグをクリアして、変更されていないように見せます。

AcceptChangesへの呼び出しを削除し、代わりにTableAdapter.Update(DataSet)を呼び出す必要があります。

+0

私は試しましたが、それでも同じ結果が得られます –

+0

'AcceptChanges'コールを削除しましたか?それ以外の場合、「更新」は更新されません。また、表アダプターのINSERT、UPDATE、およびDELETEコマンドを検査する必要があります。 –

+0

はいacceptChangesのすべての行を削除し、それらをth​​is.tableAdapterManager.UpdateAll(this.employeeDataSet)に変更しました。 updateAll関数のみが存在しないためです。 SQLはすべて正常に見えます。だから、私はコードの代わりにデータベースを使ってそのようなものを疑うようになっています。 –

0

次の記事を読んだ後: Why saving changes to a database fails?

を私はこの問題を解決する方法を考え出しました。ソリューションエクスプローラで - >データベースファイル - >プロパティ - >出力ディレクトリにコピー - > "Copy if newer"に変更します。

これは、アプリケーションの終了時にデータベースに加えられたすべての変更を効果的にコピーします。

+0

実際にこの設定では、プロジェクトに含まれているデータベースファイルが、\ bin \ debugにコピーされるのは、そのファイルよりも新しい場合のみです。すでに\ bin \ debugにあります。あなたが間違ったデータベースファイルを使用していると思われます。プロジェクトのフォルダにあるものではなく、\ bin \ debugにあるファイルを変更する必要があります。あなたの接続文字列は何ですか?私は、物事の仕組みが間違っていると思います... –