none
Probleme mit Datasetupdate nach Merge RRS feed

  • Frage

  • Hallo,

    über einen Webservice beziehe ich Daten. Mittels der Funktion Merge füge ich die Daten der Tabelle zu. Die Anzahl der Rows erhöht sich entsprechend. Dann führe ich mit einem Dataadapter ein Update aus, es kommt zu keiner Fehlermeldung. Wenn ich Daten dann wieder lade sind die Änderungen in der Datenbank nicht gespeichert. Was ich nicht verstehe ist, warum die mit Merge hinzugefügeten Zeilen den Rowstate Unchanched haben.

    Hier noch mein Code:

    <

     

    WebMethod()> Public Function DatenHochladen(ByVal Daten As dsImExport) As Boolean

     

     

    If Daten IsNot Nothing AndAlso Daten.tblBetrieb.Rows.Count > 0 Then

     

     

    Dim dsIE As New dsImExport

     

     

    Dim daBet As New dsImExportTableAdapters.tblBetriebTableAdapter

    daBet.Fill(dsIE.tblBetrieb)

     

     

    Debug.Print(dsIE.tblBetrieb.Rows.Count)

    dsIE.tblBetrieb.Merge(Daten.tblBetrieb)

     

     

    Dim drB = dsIE.tblBetrieb.Rows(0)

     

     

    Debug.Print(dsIE.tblBetrieb.Rows.Count)

    daBet.Update(dsIE.tblBetrieb)

     

     

    End If

     

     

    End Function

    Albrecht

    Donnerstag, 10. März 2011 15:54

Alle Antworten

  • Hallo Albrecht,

    leider verstehe ich Deinen Programmcode nicht wirklich, welche Daten zu welchen "gemergt" werden.

    Ich hätte erwartet
    Zu Basis-Dataset des Programms die gelesene DataTable hinzufügen.

    DatasetBetrieb.Merge(DataTableImportiert, False)

    Gruss Peter


    Peter
    Freitag, 11. März 2011 05:45
  • Hallo Peter,

    die Methode wird auf einem Server aufgerufen um Daten hinzuzufügen. Die im Dataset "Daten" enthaltenen Werte sollen zum Datenbestand ("dsIE") hinzugefügt werden.

    Gruss

    Albrecht

    Freitag, 11. März 2011 07:14
  • Hi Albrecht,

    hast Du die Lösung schon gefunden??

    Noch ein Vorschlag, setze mal den zweiten Parameter false, und schaue ob es etwas ändert.

    oder Brachial, über die rows der Tabelle tblBetrieb.

    Value=row.FieldX

    row.FieldX=DBNull

    row.FieldX=value

    Gruss Peter


    Peter
    Freitag, 11. März 2011 15:04
  • Hallo Peter,

    leider hat es noch nicht geklappt. Habe mal ein Vergleich der Datarows eingefügt. Links eine Zeile die schon in der DB vorhanden ist, rechts eine Zeile die mit MERGE hinzugefügt wurde, Keyspalte is BetriebID.

    {MobilesPF.dsImExport.tblBetriebRow} {MobilesPF.dsImExport.tblBetriebRow}
        _action: Nothing {0}     _action: Nothing {0}
        _rowID: 1     _rowID: 2
        Betrieb: 2     Betrieb: 1
        BetriebID: 1810000002     BetriebID: 1900000001
        BID: 181     BID: 190
        Element: Nothing     Element: Nothing
        HasErrors: False     HasErrors: False
        HasPropertyChanged: False     HasPropertyChanged: False
        inCascade: False     inCascade: False
        inChangingEvent: False     inChangingEvent: False
        inDeletingEvent: False     inDeletingEvent: False
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.     Item: Um eine indizierte Eigenschaft auszuwerten, muss die Eigenschaft qualifiziert sein, und die Argumente müssen explizit vom Benutzer bereitgestellt werden.
        ItemArray: {Length=6}     ItemArray: {Length=6}
        LastChangedColumn: Nothing     LastChangedColumn: Nothing
        Name: "Maier"     Name: "Schäffer"
        newRecord: 0     newRecord: 1
        ObjectID: 143     ObjectID: 144
        oldRecord: 0     oldRecord: 1
        Ort: "Lindenberg"     Ort: "Ravenburg"
        RBTreeNodeId: 1     RBTreeNodeId: 2
        RowError: ""     RowError: ""
        rowID: 1     rowID: 2
        RowState: Unchanged {2}     RowState: Unchanged {2}
        Table: {tblBetrieb}     Table: {tblBetrieb}
        tabletblBetrieb: {tblBetrieb}     tabletblBetrieb: {tblBetrieb}
        tempRecord: -1     tempRecord: -1
        Vorname: "Rudi"     Vorname: "Albrecht"  

    Irgendwie kann ich hier nichts sehen, was fehler auslösen könnte.

    Gruss

    Albrecht

    Freitag, 11. März 2011 17:47
  • Hi Albrecht, das man da nichts siehst, nehme ich auch an. Der eigentliche Fehler ist ja, wie du geschrieben hast, das Rowstate auf Unchanched steht. Wie wäre es mit der oben beschriebenen "Lösung" des problems, um zu erreichen das Rowstate <> Unchanched steht. Gibt es in deiner Anwendung eigentlich Datensätze bei denen der Primary-Key (BetriebID) in dsIE.tblBetrieb schon vorhanden ist? Wenn nein, musst du ja nicht wirklich mergen. Dann schieb die Datensätze per Command.Executescalar in die DB. Gruss Peter
    Peter
    Freitag, 11. März 2011 18:08
  • Hallo Peter,

     

    Dein Lösungsvorschlag hat leider nicht funktioniert, es kommt immer zu Updateproblemen. Was aber geht, ist alle Zeilen mittels

    Setadded zu verändern. So können auch Änderungen an bestehen Daten ausgeführt werden. 

    Warum aber die Daten nach dem Einfügen auch unchanched stehen ist mit nicht klar. Noch was zum Umfeld:

    Die Daten werden von einer .net 2.0-Anwendung aus einer Access-Datenbank generiert, mittels eines Webservice an eine ASP.NET 4.0-Anwendung gesendet und dann in eine SQL-Serveranwendung eingepflegt. Kann dies zu dem Problem führen?

    Gruss

    Albrecht

    Samstag, 12. März 2011 19:13
  • Hallo Albrecht,

    wenn Setadded funktioniert, ist's ja prima.

    Ist auch elegenter als den Wert zwischenspeichern und nochmal rein schreiben.

    Mir scheint, das Problem ist, dass bei den importirten Daten, Rowstate auf Unchanched steht. Was mir auch richtig erscheint, wenn du die Daten aus einer DB einliesst und dann mit den Webservice weitergiebst, ohne zu verändern. Wo soll das Rowstate <> Unchanched gesetzt werden.

    Frohes werken!

    Gruss Peter


    Peter
    Sonntag, 13. März 2011 05:39