Datasets: Updatereihenfolge Datenbank bei Master- Detailtabellen

28/02/2009 - 15:57 von Armin Zingler | Report spam
Hallo,

wenn ich die Datenbank mit zwei Datatables eines Datasets aktualisiere
(Update-Methode zugehörige DataAdapter), und wenn es sich dabei um Master-
und Detailtabelle handelt, in welcher Reihenfolge soll man die beiden
Updates denn ausführen? Ich dachte, zuerst die Master-, dann die
Detailtabelle. Das hat funktioniert solange ich nur "Added" Datarows habe.
Sobald ich aber Mastersàtze lösche (rowstate=deleted), dann mault die
Datenbank, weil man dem Detailsatz ja nicht den Mastersatz klauen
darf. Also muss zuerst das Update auf Detailsàtze, dann auf Mastersàtze
erfolgen - was dann wiederum bei Added rows nicht hinhaut.

Theoretisch müsste die Reihenfolge doch sein:
1. Inserts/Updates Mastersàtze
2. Inserts/Updates/Deletes Detailsàtze
3. Deletes Mastersàtze

Oder? Mit Dataadpater.update ist's dann aber auch essig, weil dabei kann ich
ja nicht sagen, welche Operationen ausgeführt werden sollen.

Ich könnte aber mit GetChanges die jeweiligen Änderungen holen und dann an
DA.Update übergeben. Ist das die bevorzugte Vorgehensweise?

...sieht dann so aus:

Dim DTAddedModified, DTDeleted As DataTable

DTAddedModified = f_DS.Dokumente.GetChanges( _
DataRowState.Added Or DataRowState.Modified)

DTDeleted = f_DS.Dokumente.GetChanges(DataRowState.Deleted)

App.DataAdapters.Dokumente.Update(DTAddedModified.Select)
App.DataAdapters.DokumenteComputer.Update(f_DS.DokumenteComputer)
App.DataAdapters.Dokumente.Update(DTDeleted.Select)

'Dokumente = Mastertabelle
'DokumenteComputer = Detailtabelle


Armin
PS: Die Datasets machen mich noch fertig...
 

Lesen sie die antworten

#1 Armin Zingler
28/02/2009 - 16:28 | Warnen spam
Armin Zingler wrote:
...sieht dann so aus:

Dim DTAddedModified, DTDeleted As DataTable

DTAddedModified = f_DS.Dokumente.GetChanges( _
DataRowState.Added Or DataRowState.Modified)

DTDeleted = f_DS.Dokumente.GetChanges(DataRowState.Deleted)



Da fehlt wohl noch

if not DTAddedModified is nothing then
App.DataAdapters.Dokumente.Update(DTAddedModified.Select)


end if

App.DataAdapters.DokumenteComputer.Update(f_DS.DokumenteComputer)



if not DTDeleted is nothing then
App.DataAdapters.Dokumente.Update(DTDeleted.Select)


End if

Dummerweise ist DTDeleted nicht Nothing, Select liefert aber trotzdem 0
Sàtze. Wie bringe ich Select dazu, alle Sàtze zu liefern? Ansonsten muss ich
mir wieder selber ein DataRow-Array für die Update-Methode
zusammenschustern.

...also so:
If Not DTDeleted Is Nothing Then
Dim Rows As DataRow()
ReDim Rows(DTDeleted.Rows.Count - 1)
For i As Integer = 0 To Rows.Length - 1
Rows(i) = DTDeleted.Rows(i)
Next
App.DataAdapters.Dokumente.Update(Rows)
End If



Armin

Ähnliche fragen