Announcement

Collapse
No announcement yet.

DataAdapter.Update - Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataAdapter.Update - Problem

    Hallo,

    folgende Sache will nicht funktionieren:
    ich habe ein DataSet, aus dem ich bestimmte Rows mithilfe von RemoveTable1Row() lösche. Das klappt soweit ganz gut. Danach füge ich mit AddTable1Row ein paar neue Rows zu dem DataSet hinzu. Wenn ich mir dann das DataSet als XML Datei ausgeben lasse, sind tatsächlich die Rows, die ich vorher gelöscht habe weg und die, die ich hinzugefügt habe, vorhanden. Wenn ich dann die Update-Methode des Adapters aufrufe, fügt er die neuen Rows zwar hinzu, löscht aber die, die ich im Dataset entfernt habe, nicht. Es scheint, dass der Adapter nur den Insert-Command ausführt, nicht aber den Delete-Command.

    Was mache ich falsch?

    Großen Dank im Voraus!

    Gruß Martin

  • #2
    Ist Dein Delete-Command korrekt befüllt?<p>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo,
      wenn die Methode <i>Fill</i> des DataAdapters aufgerufen wird, wird hinter den Kulissen die Methode <i>AcceptChanges</i> ausgeführt, damit das Flag <b>DataRowState</b> zurückgesetzt wird. Sobald ein Datensatz modifiziert wird, wird dieses je Datensatz vorhandenes Flag geändert. Die Methode <b>Update</b> des DataAdapters wertet dieses Flag dann aus, um die auszuführende Command-Anweisung festzulegen: <br>
      - <b>DataRowState.Added</b> = InsertCommand vom DataAdapter <br>
      - <b>DataRowState.Deleted</b> = DeleteCommand vom DataAdapter <br>
      - <b>DataRowState.Modified</b> = UpdateCommand vom DataAdapter <br>
      Dies bedeutet, dass eine DataRow-Instanz <b>nicht</b> aus dem DataSet entfernt werden darf, wenn die Methode Update dies auch in der Datenbank einspielen soll. Statt dessen muss dieser Datensatz nur als gelöscht markiert werden. Der Aufruf der Methode <b>Delete</b> entfernt eine DataRow-Objektinstanz nicht aus der DataTable, sondern markiert nur den RowState-Wert als gelöscht. Nur so kann der DataAdapter später aus diesem RowState-Wert eine entsprechende DeleteCommand-Anweisung ausführen. Wenn ein DataRow-Objekt vollständig entfernt werden soll, muss entweder <b>Remove</b> oder <b>RemoveAt</b> bemüht werden - aber dann kann die Methode Update diesen Datensatz nicht mehr sehen. Als Alternative zum Aufruf der Delete-Methode der DataRow-Instanz steht auch die Methode <b>RemoveAt</b> des <b>CurrencyManagers</b> zur Verfügung. Auch in diesem Fall sorgt ein späterer Update-Aufruf des DataAdapters dafür, dass eine DELETE-Anweisung für diesen Datensatz zur SQL-Datenbank geschickt wird

      Comment


      • #4
        Hi Andreas,

        danke für deine Antwort!
        Mit delete anstatt remove funktioniert es einwandfrei.

        Viele Grüße,
        Marti

        Comment

        Working...
        X