OdbcDataAdapter - UpdateSpalte definieren
Bernd M.
- asp.net
Hallo,
ich hatte mich gestern schonmal hier ans Forum gewendet.
Das Problem dort konnte ich bisher lösen. Nochmals besten
Dank.
Doch stellt sich mir nun ein neues Problem. Und zwar
bekomme ich beim Updaten folgende Fehlermeldung:
"Concurrency violation: the UpdateCommand affected 0 of
the expected 1 records."
Die Exception ist selbsterklärend. Daher meine Frage:
Wie kann ich dem Adapter (dem UpdateStatement) sagen,
_welche_ Spalte er als Merkmal für das Update nehmen
soll? D.h. ich würde gerne definieren, dass er _nur_
die ID-Spalte als Kriterium nehmen soll und nicht etwa
alle Spalten.
Wie lässt sich das realisieren?
Würde mich über eine Antwort freuen.
Danke sehr.
Bernd M.
Hallo,
du hättest auch mit der Rückfrage im ursprünglichen Thread bleiben können, ich hätte es ganz sicher dort auch gelesen.
Ich nehme mal an, dass du die zusätzlichen Commands mittels diesem
CommandBuilder erstellt hast. Der benutzt dann natürlich alle Spalten
für die WHERE-Klausel. Das macht es zwar fast "Lehrer-sicher" aber
nicht unbedingt für alle Einsatzzwecke geeignet. Ich hatte letztens
geschrieben:
Am einfachsten geht dies durch die Verwendung eines OdbcCommandBuilder
Objektes:
Die Betonung lag dabei auf "einfachsten". Denn der CommandBuilder erstellt die fehlenden Commands anhand der Resultset-Spalten-
Auflösung) automatisch. Dein Problem kannst du jetzt eigentlich
nur durch die manuelle Definition der entsprechenden SQL-Statements
erreichen. Also, z.b.
using(SqlDataAdapter da = new SqlDataAdapter(new SqlCommand("SELECT * FROM Tabelle", connection)))
{
da.UpdateCommand = new SqlCommand("UPDATE Tabelle SET Feld1 = @feld1Wert, ... WHERE Id = @eindeutigerWert", connection);
da.UpdateCommand.Parameters.Add(@"@feld1Wert", ...);
// usw.
da.Update(...);
}
Die Relation zwischen Datenbank-Tabelle und DataSet-Tabelle _muss_
nicht 1:1 sein :)
Grüsse, Frank