Bernd M.: OdbcDataAdapter - UpdateSpalte definieren

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.

  1. 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