Hallo,
hurra, ich komme voran: Ich kann jetzt Daten erfassen (mit automatischer Konvertierung und vielfacher Analyse aus
HTML-Dateien), speichern, einlesen und ändern mit folgenden Konstruktionen (stark verkürzt dargestellt):
Code:
// Typisiertes DataSet ds
dataFactory = sc.DbProviderFactories.GetFactory("FirebirdClient");
conn = dataFactory.CreateConnection();
da = dataFactory.CreateDataAdapter();
da.SelectCommand = dataFactory.CreateCommand();
da.SelectCommand.CommandText = "SELECT * FROM " + tbl.TableName;
cmdb = dataFactory.CreateCommandBuilder();
cmdb.DataAdapter = da;
da.Fill(ds, tbl.TableName);
da.InsertCommand = cmdb.GetInsertCommand();
Das funktioniert jetzt, wie gesagt:
- 1. HTML-Datei analysieren
2. Daten in die Haupttabelle tbl des Dataset eintragen
3. zusätzliche Informationen prüfen, mit anderen Tabellen vergleichen und ggf. ändern
4. Daten aus der Haupttabelle tbl in der Datenbank speichern über da.Update(tbl); Achtung: erst jetzt soll wirklich gespeichert werden!!!
Mein Problem ist nun: Die Schritte in 3. - prüfen, vergleichen, ändern - werden
in einem eigenen Formular ausgeführt; Änderungen, die dabei vorgenommen werden, sollten mit
AcceptChanges() bestätigt oder mit
RejectChanges() zurückgenommen werden können. Aber dies wirkt sich anders aus als gewünscht:
- Wenn ich AcceptChanges() aufrufe, ohne die Daten vorher in die Datenbank übertragen, werden alle Neuaufnahmen als erledigt betrachtet. Wenn ich also eine manuelle Änderung bestätige, werden alle Neuaufnahmen nicht mehr gespeichert.
- Wenn ich RejectChanges() aufrufe, wird nicht nur eine manuelle Änderung verworfen, sondern auch jede vorherige Neuaufnahme.
Wie kann ich
das von mir gewünschte Verhalten erreichen:
- den Status nach Abschluss von Punkt 2 im Dataset festhalten
- spätere Änderungen bestätigen oder verwerfen
- die vollständige Tabelle vom Dataset in die Datenbank übertragen
Danke für Tipps! Jürgen