2016-08-09 30 views
-1

Ich beginne gerade mit C# und versuche, eine CRUD für ein Dataset in einer lokalen Datenbank zu erstellen. Wenn ich mein Programm starte, funktioniert alles super. aber sobald ich es neu starte, sind alle meine Daten, die ich in der letzten Sitzung eingegeben habe, weg. Ich habe viele Artikel gelesen und sie haben gesagt: employeeDataSet.AcceptChanges(); aber auch danach funktioniert es immer noch nicht, irgendwelche ideen?C# speichert Daten, aber beim Neustart ist es verschwunden

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

}

Ein Screenshot enter image description here

+0

Können Sie "lokale Datenbank" erklären? Ist das SQL Compact Edition oder etwas anderes? –

+0

es ist sqlLocalDb in Visual Studio 2015 Ich glaube, es heißt Service-Datenbank. Die Dateierweiterung ist .mdf Außerdem spielt es keine Rolle, ob ich meine eigenen Schaltflächen oder die ursprünglichen Datenquellensteuerschaltflächen verwende, die beim Hinzufügen der Datenquelle zum Formular angezeigt werden. In beiden Fällen wird es nicht aktualisiert –

Antwort

0

AcceptChanges speichern die Daten nicht in die Datenbank zurück. Es kennzeichnet intern einfach modifizierte Datensätze als "unverändert". Es löscht das "dreckige" Flag für alle hinzugefügten/entfernten/modifizierten Datensätze im Datensatz, so dass es scheinbar unverändert ist.

Sie müssen die Anrufe zu AcceptChanges entfernen und stattdessen TableAdapter.Update(DataSet) anrufen.

+0

Ich habe es versucht, aber es gibt immer noch die gleichen Ergebnisse –

+0

Haben Sie die 'AcceptChanges' Anrufe entfernt? Ansonsten hat "Update" nichts zu aktualisieren. Außerdem sollten Sie die Befehle INSERT, UPDATE und DELETE des Tabellenadapters überprüfen. –

+0

Ja Ich habe alle acceptChanges-Zeilen gelöscht und sie in this.tableAdapterManager.UpdateAll geändert (this.employeeDataSet); da es keine einzige update updateAll-Funktion gab. Der Sql sieht gut aus. Also fange ich an zu zweifeln, was mit der Datenbank passiert, anstatt mit dem Code. –

0

Nach dem folgenden Beitrag lesen: Why saving changes to a database fails?

habe ich herausgefunden, wie man dieses Problem zu lösen. Im Solution Explorer -> Rechtsklick auf die Datenbankdatei -> Eigenschaften -> In Output-Verzeichnis kopieren -> zu "Copy if newer" wechseln.

Dies kopiert effektiv alle Änderungen an der Datenbank, wenn Sie die Anwendung schließen.

+0

Tatsächlich stellt diese Einstellung sicher, dass die im Projekt enthaltene Datenbankdatei nur nach \ bin \ debug kopiert wird, wenn sie neuer als die Datei ist ist bereits in \ bin \ debug. Ich vermute, dass Sie die falsche Datenbankdatei verwenden. Sie sollten die Datei ändern, die sich in \ bin \ debug befindet, und nicht die, die sich in Ihrem Projektordner befindet. Was ist Ihre Verbindungszeichenfolge? Ich denke, Sie bekommen ein falsches Bild davon, wie die Dinge funktionieren, wirklich ... –