Benutzer mit den meisten Antworten
tableadaptermanager.UpdateAll transaction

Frage
-
Hallo zusammen,
würde mir Bitte jemand die Frage beantworten:
Wenn ich mit Tableadaptermanager.UpdateAll mehrere Tabellen speichere, sind diese ohne eigenes zutun in eine Transaktion eingebunden?
Wenn nicht. Was muss ich machen.
Dank und Gruss
Peter
Antworten
-
Hi Peter,
ich habe mir auch den vom Designer beim SQL Server und bei Access erzeugten Code angeschaut und im Framework 4.5. wird wirklich beim UpdateAll ein Transaction-Objekt erzeugt und genutzt, im Fehlerfall auch mit Rollback. Das bedeutet, dass beim SQL Server und bei Access kein eigenes Transaction-Objekt erforderlich ist, wenn UpdateAll eingesetzt wird.--
Peter- Als Antwort markiert peter haus Freitag, 20. September 2013 10:05
Alle Antworten
-
Hallo Peter,
da ich nicht mit den Klassen arbeite, kann ich dir das nicht genau sagen. Wenn ich mir
http://blogs.msdn.com/b/bethmassi/archive/2007/07/11/tableadapters-and-transactions.aspx
durchlese, muss man die Transaktion aber explizit einleiten. (Im Link steht auch ein Beispiel, wie man das machen kann)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Peter,
ich habe mir den Code vom Tableadaptermanager angeschaut und bin unsicher, weil der Code darauf hindeutet, dass Transaktion eingebaut ist.
Würdest du Bitte einen Blick darauf werfen.
Funktioniert das nicht mit Transaction ??Gruss Peter
Code des Tableadaptermanager
...
Dim workConnection As Global.System.Data.IDbConnection = Me.Connection
...
!! BeginTransaction !!
Dim workTransaction As Global.System.Data.IDbTransaction = workConnection.BeginTransaction
If (workTransaction Is Nothing) Then
Throw New Global.System.ApplicationException("Die Transaktion kann nicht gestartet werden. Die aktuelle Datenverbindung unterst"& _
"ützt keine Transaktionen, oder der aktuelle Zustand lässt den Start der Transakt"& _
"ion nicht zu.")
End If...
danach wird diese Transaction jedem TableAdapter zugewiesen.
TableAdapter.Transaction = CType(workTransaction,Global.System.Data.SqlClient.SqlTransaction)...
'---- Perform updates -----------
'
If (Me.UpdateOrder = UpdateOrderOption.UpdateInsertDelete) Then
result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows))
result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows))
Else
result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows))
result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows))
End If
result = (result + Me.UpdateDeletedRows(dataSet, allChangedRows))
'
'---- Commit updates -----------
'
workTransaction.Commit -
Hallo Peter,
welchen Code hast Du dir wo angeschaut?
Und da dürfte entweder der Part fehlen, an dem eben ohne die Transaktion gearbeitet wird oder .NET erzeugt sich selbst eine. Da ich derzeit nichts dokumentiertes dazu finde, gehe ich aber davon aus, dass eine Transaktion explizit erzeugt werden muss.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Peter,
danke für die Antwort.
Der Codeauszug ist aus dem generierten Code Tableadaptermanager.UpdateAll() des vom Designer erstellten DataSet.
Bei
If (workTransaction Is Nothing) Then
hat workTransaction einen Inhalt, sonst würde ja die Exception ausgelösst werden!
Als auch workConnection.BeginTransaction und workConnection.Commit aufgerufen wird.Eine zweite Meinung zu dem Code würde mich brennend interessieren.
Gruss Peter
-
Hi Peter,
ich habe mir auch den vom Designer beim SQL Server und bei Access erzeugten Code angeschaut und im Framework 4.5. wird wirklich beim UpdateAll ein Transaction-Objekt erzeugt und genutzt, im Fehlerfall auch mit Rollback. Das bedeutet, dass beim SQL Server und bei Access kein eigenes Transaction-Objekt erforderlich ist, wenn UpdateAll eingesetzt wird.--
Peter- Als Antwort markiert peter haus Freitag, 20. September 2013 10:05
-
Hallo Peter,
recht herzlichen Dank dass du in den Code reingeschaut hast.
Da ich auch in Google nach Infos gesucht hatte und dort Lösungen wie z.B. den Link von Stefan gefunden hatte, aber mir auch den vom Designer erstellten Code angeschaut hatte, war ich sehr verunsichert.
Gruss Peter