Fragensteller
Update SqlCe-Datenbank mittels DataGrid

Frage
-
Hallo alle zusammen,
ich habe ein Problem beim Update der Datenbank. Sobald ich mit dem untenstehendem Code versuche, in die Datenbank zu schreiben, gibt es einen Fehler:
"Update: TableMapping['Table'] oder DataTable 'Table' kann nicht gefunden werden."
Ich habe schon vieles versucht, aber ich denke mit diesem Code unten bin ich näher dran als mit dem Rest. Zumindesten bekomme ich hier eine Fehlermeldung:)
Mit diesem Code fülle ich mein DataGrid mit den Werten aus der Datenbank.
(Command = "SELECT * FROM Termine")
private void DataGrid_Select(string Command) { SqlCeConnection conn = new SqlCeConnection("Data Source=Termine.sdf"); conn.Open(); try { SqlCeCommand cmd_greattable = new SqlCeCommand(Command, conn); SqlCeDataAdapter adp_greattable = new SqlCeDataAdapter(cmd_greattable); DataTable dtbudget0 = new DataTable(); adp_greattable.Fill(dtbudget0); dataGridView1.DataSource = dtbudget0; dataGridView1.AutoGenerateColumns = true; } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error); } conn.Close(); }
Und mit diesem Code versuche ich meine Datenbank upzudaten
private void button4_Click_1(object sender, EventArgs e) { SqlCeConnection conn = new SqlCeConnection("Data Source=Termine.sdf"); conn.Open(); SqlCeCommand cmd_greattable = new SqlCeCommand("SELECT * FROM Werte", conn); SqlCeDataAdapter adp_greattable = new SqlCeDataAdapter(cmd_greattable); DialogResult dr = MessageBox.Show("Soll die Daten wirklich in die Datenbank geschrieben werden?\n\nDadurch gehen die alten Daten verloren!", "Datenbank aktualisieren", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information); if (dr == DialogResult.Yes) { try { adp_greattable.Update(termineDataSet); } catch (Exception exceptionObj) { MessageBox.Show(exceptionObj.Message.ToString()); } } conn.Close(); }
Ich hoffe, ihr könnt mir helfen.
VG
BlackRose2
Alle Antworten
-
Hallo,
damit Du eine Tabelle aktualisieren kannst, braucht ein DataAdapter die dazugehörigen Insert-/Update- und DeleteCommand-Anweisungen. Die wiederum brauchen eine Zuordnung von Spalten der DataTable zur Tabelle der Datenbank - was hier die Ausnahme auslöst.
Damit Du die Tabelle aktualisieren kannst, musst Du also entweder die Befehle manuell erstellen.
Oder aber einen CommandBuilder, hier SqlCeCommandBuilder verwenden.Oder aber Du erstellt gleich ein typisiertes Dataset mit einem TableAdapter.
Letzteres würde ich Dir empfehlen, da man sich damit einiges an Arbeit spart.
Gruß Elmar
-
Hallo,
erst einmal vielen Dank für deine Antwort.
Ich habe jetzt im TableAdapter-Konfigurations-Assitenten ein TableAdapter aus meinem termineDataSet erstellt. Jetzt weiß ich aber nicht weiter. Ich habe dazu noch die einzelnen Befehle mit angehangen (SELECT, INSERT, UPDATE).
Aber wie bekomme ich jetzt das Update hin?
VG
BlackRose2
-
Hallo,
Beispielcode findest Du im Abschnitt:
Gewusst wie: Aktualisieren von Daten mit einem TableAdapter
Gruß Elmar
-
Hallo,
so ich habe das jetzt ungefähr so gemacht wie es in dem von dir erwähntem Artikel steht gemacht. Die Fehlermeldung kommt jetzt nicht mehr, das Programm läuft ordnungsgemäß durch.
Leider aktualisiert er mir immer noch nicht die Datenbank.
Hier noch mal der jetztige Stand meines Codes:
private void button4_Click_1(object sender, EventArgs e) { SqlCeConnection conn = new SqlCeConnection("Data Source=Termine.sdf"); conn.Open(); SqlCeCommand cmd_greattable = new SqlCeCommand("SELECT * FROM Werte", conn); SqlCeDataAdapter adp_greattable = new SqlCeDataAdapter(cmd_greattable); DialogResult dr = MessageBox.Show("Soll die Daten wirklich in die Datenbank geschrieben werden?\n\nDadurch gehen die alten Daten verloren!", "Datenbank aktualisieren", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information); if (dr == DialogResult.Yes) { try { this.Validate(); adp_greattable.Update(termineDataSet.Werte); notifyIcon1.BalloonTipText = "Die Einstellungen wurden erfolgreich gespeichert"; notifyIcon1.ShowBalloonTip(5000); } catch (Exception exceptionObj) { MessageBox.Show(exceptionObj.Message.ToString()); } } conn.Close(); Einstellungen("SELECT * FROM Werte"); }
VG
BlackRose2
-
Hallo,
der gezeigte Code ist wie am Anfang so nicht funktionstüchtig.
Also ich weiß nicht, was Du Dir von den Links durchgelesen hast, aber von einem typisierten DataSet ist bei Dir nichts zu sehen.
Bitte arbeite mal für den Anfang durch:
Gewusst wie: Erstellen eines typisierten Datasets
Exemplarische Vorgehensweise: Erstellen einer einfachen Datenanwendung
(und verwende anstatt der vorgegebenen Deine Tabellen, verzichte aber am Anfang optische Aufheller wie Ballons ;)
Gruß Elmar
-
Hallo,
also ich kriege das nicht so hin mit dem typisierten Datasets. Deshalb habe ich es mal anders versucht.
Leider bekomme ich da immer diesen Fehler, wenn ich etwas in die Datenbank ändere:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Rausgefunden habe ich, dass das daran liegt, dass ich NULL-Werte übergebe, dies mache ich aber bewusst.
Hier Code:
private void button4_Click_1(object sender, EventArgs e) { string Bewirtung = null; string Exponate = null; string ID = null; string Pflichtfeld = null; string PSA = null; string Raum = null; string Technik = null; string Werbemittel = null; SqlCeConnection conn = new SqlCeConnection("Data Source=Termine.sdf"); conn.Open(); DialogResult rewrite = MessageBox.Show("Soll die Daten wirklich in die Datenbank geschrieben werden?\n\nDadurch gehen die alten Daten verloren!", "Datenbank aktualisieren", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information); if (rewrite == DialogResult.Yes) { try { foreach (DataGridViewRow row in dataGridView2.Rows) { ID = row.Cells["ID"].Value.ToString(); PSA = row.Cells["PSA"].Value.ToString(); Bewirtung = row.Cells["Bewirtung"].Value.ToString(); Raum = row.Cells["Raum"].Value.ToString(); Werbemittel = row.Cells["Werbemittel"].Value.ToString(); Technik = row.Cells["Technik"].Value.ToString(); Exponate = row.Cells["Exponate"].Value.ToString(); Pflichtfeld = row.Cells["Pflichtfelder"].Value.ToString(); if (PSA == "") PSA = DBNull.Value.ToString(); if (Bewirtung == "") Bewirtung = DBNull.Value.ToString(); if (Raum == "") Raum = DBNull.Value.ToString(); if (Werbemittel == "") Werbemittel = DBNull.Value.ToString(); if (Technik == "") Technik = DBNull.Value.ToString(); if (Exponate == "") Exponate = DBNull.Value.ToString(); if (Pflichtfeld == "") Pflichtfeld = DBNull.Value.ToString(); SqlCeCommand command = new SqlCeCommand("UPDATE Werte SET [PSA]=@psa, [Bewirtung]=@bewirtung, [Raum]=@raum, [Werbemittel]=@werbemittel, [Technik]=@technik, [Exponate]=@exponate, [Pflichtfelder]=@pflichtfeld WHERE [ID]=@id", conn); command.Parameters.Add(new SqlCeParameter("@psa", SqlDbType.NVarChar, 50, "PSA")); command.Parameters.Add(new SqlCeParameter("@bewirtung", SqlDbType.NVarChar, 50, "Bewirtung")); command.Parameters.Add(new SqlCeParameter("@raum", SqlDbType.NVarChar, 50, "Raum")); command.Parameters.Add(new SqlCeParameter("@werbemittel", SqlDbType.NVarChar, 50, "Werbemittel")); command.Parameters.Add(new SqlCeParameter("@technik", SqlDbType.NVarChar, 50, "Technik")); command.Parameters.Add(new SqlCeParameter("@exponate", SqlDbType.NVarChar, 50, "Exponate")); command.Parameters.Add(new SqlCeParameter("@pflichtfeld", SqlDbType.NVarChar, 20, "Pflichtfelder")); command.Parameters.Add(new SqlCeParameter("@id", SqlDbType.Int, 4, "ID")); command.Parameters["@psa"].Value = PSA; command.Parameters["@raum"].Value = Raum; command.Parameters["@bewirtung"].Value = Bewirtung; command.Parameters["@werbemittel"].Value = Werbemittel; command.Parameters["@technik"].Value = Technik; command.Parameters["@exponate"].Value = Exponate; command.Parameters["@pflichtfeld"].Value = Pflichtfeld; command.Parameters["@id"].Value = ID; command.ExecuteNonQuery(); } } catch (Exception exceptionObj) { MessageBox.Show(exceptionObj.Message.ToString(), "Fehler"); } } conn.Close(); Einstellungen("SELECT * FROM Werte"); }
Vielleicht noch ein paar Informationen zu meiner Tabelle:
Die Tabelle hat 8 Spalten. 7 davon dürfen NULL-Werte enthalten und sind VarChars, die 8. Spalte ist die ID-Spalte, ist Integer und ist Primary.
VG
BlackRose2
- Bearbeitet BlackRose2 Freitag, 10. Mai 2013 17:24