Fragensteller
Probleme mit Datasetupdate nach Merge

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
- Bearbeitet Albrecht Schäffer Donnerstag, 10. März 2011 16:00 code formatiert
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 -
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 -
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
-
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 -
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
-
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