2017-05-18 1 views
-1

Problem, das mich für die letzten 4 Stunden gefangen hat. Mein Dataset erhält die Änderungen, aber die Datenbank nicht.C# Datenbank wird nicht vom Dataset aktualisiert. SQLCommandBuilder

Stuff, die gerade liegt etwa als "global" var:

DatabaseConnection objConnect;   
    string conString; 
    DataSet ds; 
    int MaxRows; 

Meine Form Last initialisiert db Verbindungen:

  objConnect = new DatabaseConnection(); 
      conString = Properties.Settings.Default.memoDbConnectionString; 
      objConnect.connection_string = conString; 

ich diesen Knopf haben, dass meine Daten-Set ändert und ruft meine Datenbankaktualisierung

private void button5_Click(object sender, EventArgs e) 
    { 
     // 

     objConnect.Sql = Properties.Settings.Default.userSQL; 
     ds = objConnect.GetConnection; 
     MaxRows = ds.Tables[0].Rows.Count; 

     for (int i = 0; i < MaxRows; i++) 
     { 
      DataRow dRow = ds.Tables[0].Rows[i]; 
      if (nick == dRow.ItemArray[0].ToString()) 
       if (textBox4.Text == textBox5.Text) 
        if (textBox3.Text == dRow.ItemArray[1].ToString()) 
        { 
         ds.Tables[0].Rows[i][1] = textBox5.Text; 
         //this is the interesting bit 
         DataSet changes = ds.GetChanges(); 

          objConnect.UpdateDatabase(changes); 

         //----- 
         MessageBox.Show(nick); 
         MessageBox.Show(dRow[1].ToString()); 

         break; 
        } 
        else MessageBox.Show("Old password is wrong."); 
       else MessageBox.Show("Pass confirmation does not correspond."); 
        } 
     } 

die Funktion, die ich in der Database Klasse verwenden:

public void UpdateDatabase(System.Data.DataSet ds) 
    { 
     System.Data.DataSet changes = ds.GetChanges(); 
     System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1); 
     //stuff thats suppsed to help 
     da_1.UpdateCommand = cb.GetUpdateCommand(); 
     //---- 
      da_1.Update(ds.Tables[0]); 
     ds.AcceptChanges(); 
    } 

da_1 ist ein SqlDataAdapter, die ich außerhalb der Funktion zu erklären, aber es in einer Funktion nur vor diesem Attribut.

+0

Ich habe gerade festgestellt, dass es liest aus einer Datenbank und schreibt aus irgendeinem Grund in eine andere. Meine Verbindungszeichenfolge ist: Visual Studio 2015 \ Projekte \ memo \ memo \ Ressourcen \ memoDb.mdf –

+0

In Lösung Explorer sagt meine DB ist ignoriert, derjenige, der tatsächlich auf dem Weg ist. –

Antwort

0

Diese Antwort:

Ok, I'm going to take a guess here. Is the PacjenciDB.sdf included 
into Visual Studio project by any chance? Do you have the property" Copy 
to output folder" set to "Always" or something similar? It seems 
that every time you do a build you could be overwriting 
your output folder database file. Try putting the database in a folder 
that is not inside VS project. 

BTW, your code is OK. 

Von this Post hat mir geholfen. Eine Sache zu beachten ist, wenn Sie das Programm aus dem Debug-Ordner starten wird es keine Probleme haben und das hat mir geholfen, das Problem zu finden. Das Problem war in der Tatsache, dass ich meine db in das Projekt als Datenquelle sowie hinzugefügt Diese Verbindungszeichenfolge und ihre Ähnlichkeit zueinander machen. Das Löschen von Datenquellen und das erneute Hinzufügen aus dem richtigen Ordner im Lösungsexplorer wurde für mich erledigt.

Verwandte Themen