Laden...

Editierte DataRow kommt nicht in DB an

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.433 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Editierte DataRow kommt nicht in DB an

verwendetes Datenbanksystem: <SQLEPRESS2008>
Ich habe eine DataRowView (Master-Einstellung für die zu editierenden DataRow's) von der ich die Spaltenwerte in andere DataRow's übernehmen möchte.

Vorgehensweise: Ich ändere erst die DataRowView (dient dann als Master-Spaltendaten). Dann nehme ich mir die DataRow's vor, die ich editieren möchte. Ich suche in der DataTable mit Select die DataRow und duchlaufe die Spalten in einer Schleife. Dabei übergebe ich die Daten der DataRowView an die DataRow. Nach dem Durchlauf wird mit .AcceptChanges() die Änderungen der DataRow übernommen. Sind alle DataRow's editiert, wird mit Hilfe des CommandBuilders die Änderungen vom DataSet in die Datenabnk gespeichert. Im Anhang mal Code mit der PRoblematik.

Das Problem ist, die Änderungen kommen in der Datenbank nicht durch. Ich versteh aber nicht warum. Wenn ich debugge, dann sehe ich wie die Daten in die DataRow übernommen wurden. Da muß beim aktualisieren irgendie auf falsche Werte zugeriffen werden.


if (_editMode)
                            {
                                //// Bemerkung: Hier bei 2. Tag beginnen, der erste wird als Master verwendet
                                for (int m = 1; m < _auswahlTage.Count; m++)
                                {
                                    /// Zu editierende DataRow suchen (nach Datum, das gibts nur einmal in der Tabelle)
                                    DataRow[] rw = _MVDataSet.Tables[i].Select("Datum = '" + _auswahlTage[m] + "'");
                                    rw[0].BeginEdit();

                                    //// Die daten der Master-DataRowView an die DataRow die zu editieren ist übergeben
                                    for (int n = 1; n < drv.Row.ItemArray.Length; n++)
                                    {
                                        /// Diese beiden Spalten werden übergangen
                                        if ("Anderungszeit" == rw[0].Table.Columns[n].ColumnName)
                                            continue;
                                        if ("Datum" == rw[0].Table.Columns[n].ColumnName)
                                            continue;

                                        rw[0][n] = drv[n];
                                    }
                                    rw[0].EndEdit();
                                    /// Änderungen der DataRow übernehmen (Proposed mit Current-Werten ersetzen)
                                    rw[0].AcceptChanges();
                                    
                                    GetVerbrauchsdaten(i, _auswahlTage[m]);
                                }
                                /// Tabelle mit Änderungen übernehmen
                                _MVDataSet.Tables[i].AcceptChanges();
                            }

Hat jemand die zündende Idee, warum das nicht funktioniert?
Wenn ich Standardmäßig nur einen datenstz ändere, dann klappts. Kann das noch irgend etwas mit den Proposal und Current-Daten zu tun haben?

M
115 Beiträge seit 2003
vor 13 Jahren

Mußt Du nicht DataAdapter.Update() aufrufen, um die Änderungen in die Datenbank zu übernehmen?

Oder steht das anderswo?

Gernot Melichar

194 Beiträge seit 2006
vor 13 Jahren

Hallo zusammen

..
Mußt Du nicht DataAdapter.Update() aufrufen
..

Ja und imo komplett ohne .AcceptChanges()

Gruss

Balaban_S

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren

Hallo, natürlich habe ich das integriert, in einem try..catch-Block


try
                {
                    _sqlcmb = new SqlCommandBuilder(_arSqladap[i])
                                  {
                                      SetAllValues = true,
                                      ConflictOption = ConflictOption.OverwriteChanges
                                      //ConflictOption = ConflictOption.CompareRowVersion
                                  };
                    _arSqladap[i].Update(_MVDataSet.Tables[i]);
                }

Tja, und jetzt habe ich gerade noch das .AcceptChanges() weggelassen, und siehe da es geht. Das .AcceptChanges() setzt mir ja die editierte Zeile wieder auf "unchanged", womit sie beim Update der Datenbank nicht erfasst werden kann.