none
tableadaptermanager.UpdateAll transaction RRS feed

  • 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

    Mittwoch, 18. September 2013 12:51

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
    Donnerstag, 19. September 2013 19:59

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

    Mittwoch, 18. September 2013 18:09
    Moderator
  • Hi Peter,
    UpdateAll organisiert nur die bei Hierarchien erforderliche Reihenfolge der Aktualisierung. Kapseln in eine Transaction muss man zusätzlich bei Bedarf.

    --
    Peter

    Donnerstag, 19. September 2013 04:42
  • Hallo Stefan.

    Danke für den Link.

    Gruss Klaus

    Donnerstag, 19. September 2013 06:39
  • 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

     

    Donnerstag, 19. September 2013 07:37
  • 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

    Donnerstag, 19. September 2013 09:12
    Moderator
  • 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

    Donnerstag, 19. September 2013 12:55
  • 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
    Donnerstag, 19. September 2013 19:59
  • 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

    Freitag, 20. September 2013 10:05