Neuer Datensatz wird gespeichert, Änderung nicht

07/01/2008 - 09:14 von Anton Reinthaler | Report spam
Hallo NG

Neuer Datensatz làßt sich in die DB einfügen.
Möchte ich lediglich eine Änderung durchführen, wird diese nicht in die DB
übernommen.

Bei neuem Datensatz sieht der Code so aus:

row = DT.NewRow()
row.Item(1) = tbNachname.Text
row.Item(2) = tbVorname.Text
DT.Rows.Add(row)
DA.Update(DT)
und er funktioniert.

Bei einer Änderung sieht der Code so aus:

row = DT.Rows(CM.Position)
row.Item(1) = tbNachname.Text
row.Item(2) = tbVorname.Text
i = DA.Update(DT)
und er funktioniert nicht.

Im Debugger seh ich, dass row.Rowstate=UnChanged ist, obwohl ich die
geànderten Daten in row.ItemArray sehen kann. Die Variable i ist natürlich
0.
tbNachname und tbVorname sind gebundene Felder. Deshalb hab ich dann auch,
aus purer Verzweiflung, gleich an der Stelle, wo die Daten das erste Mal in
der Form angezeigt werden, also noch vor jeder Änderungsmöglichkeit, ein
DT.AcceptChanges geschrieben. Hat auch nichts genützt.

Help me, help me please he said,
before the hunter shoot me dead.

Grüße Toni
 

Lesen sie die antworten

#1 Peter Fleischer
07/01/2008 - 09:29 | Warnen spam
"Anton Reinthaler" schrieb im Newsbeitrag
news:

Im Debugger seh ich, dass row.Rowstate=UnChanged ist, obwohl ich die
geànderten Daten in row.ItemArray sehen kann. Die Variable i ist natürlich
0.



Hi Anton,
wenn die Daten im Client ungeàndert sind, dann sieht der DataAdapter auch
keine Notwendigkeit, etwas zu unternehmen. Du musst also ermitteln, warum
RowSaten nicht "modified" ist. Meistens ist das die Flge eines unpassenden
AcceptChanges oder eines fehlenden EndCurrentEdit.

tbNachname und tbVorname sind gebundene Felder.



Haben die gebundenen Felder ihre geànderten Pufferinhalte auch an die
DateSource übergeben (EndCurrentEdit explizit oder implizit durch
Datensatzwechsel)?

Deshalb hab ich dann auch, aus purer Verzweiflung, gleich an der Stelle,
wo die Daten das erste Mal in der Form angezeigt werden, also noch vor
jeder Änderungsmöglichkeit, ein DT.AcceptChanges geschrieben. Hat auch
nichts genützt.



Mit AcceptChanges teilst du ADO.NET mit, dass jegliche geànderten Werte
weiter als Originalwerte zu betrachten sind und damit die Daten den Status
"unchanged" erhalten. Ein nachfolgendes Update kann da nicht mehr erkennen,
dass mit den Daten etwas zu machen wàre. Die ursprünglichen originalwerte
sind verloren. Es wàre also auch keine Konflikterkennung mehr möglich.

Wenn du die im DataAdapter.Update implementierte Technologie nicht nutzen
willst/kannst, musst du eigene SQL-Anweisungen absetzen (mit ExecNonQuery).

Peter

Ähnliche fragen