Announcement

Collapse
No announcement yet.

DataSet->Datenbank

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

  • DataSet->Datenbank

    Hallo!

    Ich habe das Problem das die Daten aus meinem DataSet nicht in die Datenbank kommen.

    Die Daten werden beim FormLoad in ein DataGridView aus der Datenbank gelesen (Bindung über Assistent).
    Dann werden die Daten geändert und will sie speichern.
    Dies mach ich über
    DataAdapter.Update(DataSet);
    DataSet.AcceptChanges();

    Leider landen die geändert Daten nie in der Datenbank.
    Was mach i dabei falsch?
    VS2005 Express

    Vielen Dank

  • #2
    Hallo,
    der DataAdapter schickt für jeden geänderten Datensatz eine UPDATE-Anweisung zur Datenbank. Bei dieser UPDATE-Anweisung legt die WHERE-Einschränkung fest, über welchen Weg der zu aktualisierende Datensatz von der Datenbank logisch eindeutig in der Datenmenge der betroffenen Tabelle gefunden werden kann. Die Eigenschaft <b>UpdateCommand.CommandText</b> könnte zum Beispiel für eine Tabelle mit den Spalten <i>ANRID</i> und <i>Anrede</i> so aussehen:
    <code>
    UPDATE [dbo].[ANR]
    SET [Anrede] = @Anrede
    WHERE
    (([ANRID] = @Original_ANRID) AND ([Anrede] = @Original_Anrede));
    </code>
    Die Spalten ANRID und Anrede werden jeweils mit dem zuerst über SELECT (Fill-Methode) ausgelesenen Originalwerten (@Original_xxx) verglichen. Als Parameter-Werte müssen die <b>DataRowVersion.Original</b>-Daten aus dem DataSet übergeben werden, während für die zu aktualisierende Tabellenspalte die <b>DataRowVersion.Current</b>-Werte zuständig sind.
    <br>
    Im Idealfall hat die Tabelle einen garantiert eindeutigen <b>Primärschlüssel</b>, so dass in der UPDATE-Anweisung im WHERE-Abschnitt nur der Primärschlüsselwert angegeben wird. Der zu aktualisierende Datensatz ist somit eindeutig.
    <br>
    Im Worst Case werden alle Spalten der Tabelle im WHERE-Abschnitt verglichen, so dass eine Aktualisierung (UPDATE) nur dann erfolgreich ist, wenn <b>keine einzige</b> Spalte der Tabelle einen Datentyp verwendet, bei dem <b>Rundungsfehler</b> auftreten können.
    <br>Die Frage <i>Was mach i dabei falsch? </i> kann somit nur dann beantwortet werden, wenn a) die Tabellenstruktur und b) die vom DataAdapter ausgeführte UpdateCommand-Anweisung bekannt ist.
    <br>
    P.S: Der nachfolgende AcceptChanges-Aufruf ist unnötig, da der Update-Aufruf dies implizit erledigt

    Comment


    • #3
      <a href="/webx?50@@.4a8747e7">Nooa "XML --> SQL ?" 27.03.2006 17:18</a&gt

      Comment

      Working...
      X