C# Automatisch von dataGridView in SQL Tabelle speichern

daniel_7

Newbie
Registriert
Aug. 2017
Beiträge
4
Hallo, ich habe folgendes Problem:

Ich habe ein dataGridView mit Daten aus einer SQL Tabelle. Wenn ich nun einen Datensatz ändern möchte bzw. wenn ich einen Datensatz hinzufügen möchte, wird dieser nicht in die SQL Tabelle übertragen. Ich habe dies (siehe Code) wie folgt "probiert". Ich verwende dazu das Ereignis "dataGridView1_CellLeave". Also jedes mal, wenn ich die 3. Spalte verlasse, sollen alle Daten in die Datenbank geschrieben werden.

Meiner Meinung nach ist das Problem, dass die eingegebenen Daten nicht sofort übernommen werden und dadurch wird noch der alte Wert in die Datenbank geschrieben. Weil wenn ich 2 Werte ändere und mir dann die Tabelle anschaue, sehe ich, das der 1. geänderte Wert in die SQL Datenbank übernommen wurde. Wie schaffe ich das, dass ein geänderter Wert sofort übernommen wird und in die SQL Tabelle übertragen wird?

Code:
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 2)
            {
                try
                {
                    cmdUpdate = new SqlCommandBuilder(da);
                    da.Update(dt);
                    MessageBox.Show("Daten erfolgreich gespeichert!");
                }

                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }

Vielen Dank im Vorraus!

MfG Daniel
 
Ich kenne jetzt hier die Funktion und C# nicht, daher kann ich (als DB-Admin) nur vermuten: Muß Du nach dem Update noch ein Commit hinzufügen? In vielen Datenbanken reicht ein Update per SQL nicht aus, da diese Werte immer nur temporär übernommen werden, um ein Rollback zu ermöglichen. Erst ein Commit überträgt dann die Werte dann fest in die Tabellen.
 
Hallo PHuV,

vielen Dank für die Antwort!

Selbst wenn es an dem liegen würde, wieso wird dann, wenn ich 2 Werte aktualisiere, der 1.Wert in die Datenbank übertragen? Die DataAdapter.Update-Methode ruft für jede geänderte, gelöschte oder eingefügte Zeile die entsprechenden Anweisung (UPDATE, DELETE, INSERT) auf und führt diese aus. Daher glaub ich immer noch, dass die Werte, nachdem ich ein Feld verlassen habe, nicht sofort im dataGridView übernommen werden und daher wird noch der alte Wert in die Datenbank geschrieben.
 
Taste Dich doch mal vor, und schreib mal in immer nur einen Wert rein, und schau, ob das funktioniert. Vielleicht hat die Funktion auch einen Fehler. Kannst Du vielleicht eine andere Funktion gegentesten?
 
Ich benutze das sonst meist nicht, aber laut Doku setzt der SqlCommandBuilder einen Listener auf RowUpdate. Offenbar erstellst du den CommandBuilder aber erst, nachdem du die Daten verändert hast. Kann mir gut vorstellen, dass er nichts von den Änderungen weiß und es deshalb nicht funktioniert.
 
@PHuV: Ja, habe auch schon andere Funktion getestet (also wenn der Wert einer Zelle geändert wurde, wenn der Fokus verändert wurde,...) aber jedes mal ändert sich der Wert zwar im dataGridView, aber nicht in der Datenbank. Habe jetzt mal die Funktion in einen Button gegeben und siehe da, alle Werte werden richtig gespeichert.

@Enurian: Ich bin davon ausgegangen, das ich den Command erst builden muss, nachdem ich einen Wert verändert hab, damit dieser weiß, welchen Command er ausführen muss (UPDATE, INSERT, DELETE). Wie oben schon erwähnt funktioniert das Speichern der Daten mit einem Button ohne Probleme, daher ist meine Vermutung wohl richtig, das der Wert nicht sofort im dataGridView übernommen wird.
 
@Ocram1992: Ja, auch dieses Event habe ich schon probiert und ich komme immer auf das gleiche Ergebnis. Zudem habe ich auch schon das Event "dataGridView1_CellEndEdit" probiert.

Was mir jetzt noch zusätzlich aufgefallen ist das selbst wenn ich denselben Wert 2 Mal ändere, wird dieser nicht in die Datenbank übertragen.
 
Zurück
Oben