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?
Mußt Du nicht DataAdapter.Update() aufrufen, um die Änderungen in die Datenbank zu übernehmen?
Oder steht das anderswo?
Gernot Melichar
Hallo zusammen
..
Mußt Du nicht DataAdapter.Update() aufrufen
..
Ja und imo komplett ohne .AcceptChanges()
Gruss
Balaban_S
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.