Hallo,
ich fange jetzt an, möglichst <b>DB-unabhängig unter NET 2.0 (#D für Firebird)</b> zu programmieren. SELECT für <u>DataSet und DataGridView</u> klappt; aber mein erster Versuch zur <b>"automatischen Speicherung"</b> geht teilweise schief. Den Ablauf und Zusammenhang verstehe ich nicht und bitte deshalb erst mal um Hinweise, auf welchem Weg ich den Fehler eingrenzen und wonach ich suchen kann.
<u>DB-Umgebung und IDE</u>
FB 2.0 RC4, FB-Net-Provider 2.0 RC1
NET 2.0 mit #D 2.0
halbautomatisch erzeugte xsd-Datei, typisiertes DataSet durch xsd.exe
<u>Ausgangspunkt (mit den wichtigsten Befehlen)</u>
dataFactory = DbProviderFactories.GetFactory("FirebirdClient");
da = dataFactory.CreateDataAdapter();
// SelectCommand erzeugen
da.SelectCommand = dataFactory.CreateCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "SELECT * FROM " + tbl.TableName;
cmdb = dataFactory.CreateCommandBuilder();
cmdb.DataAdapter = da;
// jetzt Befehl ausführen
da.Fill(ds, tbl.TableName);
da.InsertCommand = cmdb.GetInsertCommand();
da.DeleteCommand = cmdb.GetDeleteCommand();
da.UpdateCommand = cmdb.GetUpdateCommand();
Nach <u>Neuaufnahme eines Datensatzes</u> im DataSet wollte ich diesen sofort in die DB übertragen (testweise):
try {
da.Update(tbl);
} catch (fb.FbException ex) {
MessageBox.Show(ex.Message, "Firebird-Exception");
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Allgemeine Exception");
}
Dabei bekomme ich immer wieder <u>Fehlermeldungen:</u>
1. Versuch mit <b>FbException:</b> "validation error for column JAHR_GEB, value ' '" (d.h. 4 Leerzeichen). Dabei handelt es sich um ein CHAR(4)-Feld (NULL erlaubt).
2. Versuch mit Feldinhalt "1763" mit allgemeiner <b>Exception:</b> "ArgumentNullException - 'dataType'-Argument darf nicht null sein." Trotzdem wurde der Datensatz übertragen (wie ich mit IBExpert festgestellt habe).
3. Versuch (nach manueller Löschung) lieferte den gleichen Fehler.
4. Versuch (dito) war <b>erfolgreich.</b>
Der #D-Debugger gab zusätzlich Hinweis auf die letzten Maßnahmen:
Update() // wahrscheinlich der Auslöser
UpdateFromDataTable() // eine protected-Maßnahme?
Update() // ??
Wer kann mir Tipps geben, wo ich die Umstände des Fehlers suchen kann oder welche Informationen ich/Ihr benötigt? Danke! Jürgen
ich fange jetzt an, möglichst <b>DB-unabhängig unter NET 2.0 (#D für Firebird)</b> zu programmieren. SELECT für <u>DataSet und DataGridView</u> klappt; aber mein erster Versuch zur <b>"automatischen Speicherung"</b> geht teilweise schief. Den Ablauf und Zusammenhang verstehe ich nicht und bitte deshalb erst mal um Hinweise, auf welchem Weg ich den Fehler eingrenzen und wonach ich suchen kann.
<u>DB-Umgebung und IDE</u>
FB 2.0 RC4, FB-Net-Provider 2.0 RC1
NET 2.0 mit #D 2.0
halbautomatisch erzeugte xsd-Datei, typisiertes DataSet durch xsd.exe
<u>Ausgangspunkt (mit den wichtigsten Befehlen)</u>
dataFactory = DbProviderFactories.GetFactory("FirebirdClient");
da = dataFactory.CreateDataAdapter();
// SelectCommand erzeugen
da.SelectCommand = dataFactory.CreateCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "SELECT * FROM " + tbl.TableName;
cmdb = dataFactory.CreateCommandBuilder();
cmdb.DataAdapter = da;
// jetzt Befehl ausführen
da.Fill(ds, tbl.TableName);
da.InsertCommand = cmdb.GetInsertCommand();
da.DeleteCommand = cmdb.GetDeleteCommand();
da.UpdateCommand = cmdb.GetUpdateCommand();
Nach <u>Neuaufnahme eines Datensatzes</u> im DataSet wollte ich diesen sofort in die DB übertragen (testweise):
try {
da.Update(tbl);
} catch (fb.FbException ex) {
MessageBox.Show(ex.Message, "Firebird-Exception");
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Allgemeine Exception");
}
Dabei bekomme ich immer wieder <u>Fehlermeldungen:</u>
1. Versuch mit <b>FbException:</b> "validation error for column JAHR_GEB, value ' '" (d.h. 4 Leerzeichen). Dabei handelt es sich um ein CHAR(4)-Feld (NULL erlaubt).
2. Versuch mit Feldinhalt "1763" mit allgemeiner <b>Exception:</b> "ArgumentNullException - 'dataType'-Argument darf nicht null sein." Trotzdem wurde der Datensatz übertragen (wie ich mit IBExpert festgestellt habe).
3. Versuch (nach manueller Löschung) lieferte den gleichen Fehler.
4. Versuch (dito) war <b>erfolgreich.</b>
Der #D-Debugger gab zusätzlich Hinweis auf die letzten Maßnahmen:
Update() // wahrscheinlich der Auslöser
UpdateFromDataTable() // eine protected-Maßnahme?
Update() // ??
Wer kann mir Tipps geben, wo ich die Umstände des Fehlers suchen kann oder welche Informationen ich/Ihr benötigt? Danke! Jürgen
Comment