Ich habe einige vorhandene C# -Code, die ich über COM-Interop freigeben möchte, so dass es von Excel VBA aufgerufen werden kann. Da ich viele geschachtelte Batch-Update-Operationen durchführen werde, muss ich Transaktionen unterstützen und um das Refactoring auf C# -Ebene zu minimieren, möchte ich den TransactionScope-Ansatz verwenden:Initiieren eines TransactionScope von Excel VBA?
Implementieren einer impliziten Transaktion mithilfe des Transaktionsbereichs
http://msdn.microsoft.com/en-us/library/ms172152.aspx
die Transaction-Klasse bietet eine einfache Möglichkeit, einen Block von Code wie die Teilnahme an einer Transaktion zu markieren, ohne Sie zu Interaktion mit der Transaktion selbst zu erfordern. Ein Transaktionsbereich kann auswählen und die Ambient-Transaktion automatisch verwalten. Aufgrund seiner Benutzerfreundlichkeit und Effizienz empfiehlt es sich, bei der Entwicklung einer Transaktionsanwendung die TransactionScope-Klasse zu verwenden.
Darüber hinaus müssen Sie keine Ressourcen explizit mit der -Transaktion registrieren. Jeder System.Transactions-Ressourcenmanager (z. B. SQL Server ) kann das Vorhandensein einer Umgebungstransaktion erkennen, die vom Gültigkeitsbereich erstellt und automatisch registriert wird.
Meine Frage ist: ist es möglich, die Transaction im VBA-Code initiieren (oder C# Methode über COM-Aufruf Interop ein Transaction Objekt zu instanziiert und zurück), und fahren Sie dann verschiedene andere C# Objekte nennen über COM Interop, die alle automatisch an der einzelnen Root-Transaktion teilnehmen?
Nein, das können Sie definitiv nicht in VBA tun. –
Könnten Sie (hoffentlich werde ich Sie nicht bitten, ein Negativ zu beweisen) – tbone
Ich habe meine Antwort gelöscht, da ich glaube nicht, dass wir auf der gleichen Seite verstehen, was das TransactionScope für C# ist und was es in VBA wäre. ADODB implementiert den Mechanismus, um alle Änderungen während einer Transaktion rückgängig zu machen, aber Sie können keinen Block eines VBA-Codes in ein TransactionScope umbrechen und es wird zurückgesetzt, wenn die Transaktion fehlgeschlagen ist ... –