Ho qualche codice C# esistente che vorrei esporre tramite com interop in modo che possa essere chiamato da Excel VBA. Poiché eseguirò molte operazioni di aggiornamento batch nidificate, devo supportare le transazioni e per ridurre al minimo il refactoring richiesto a livello C#, vorrei utilizzare l'approccio TransactionScope:Avvio di TransactionScope da Excel VBA?
Implementazione di una transazione implicita utilizzando Transaction Scope
http://msdn.microsoft.com/en-us/library/ms172152.aspx
la classe TransactionScope fornisce un modo semplice per marcare un blocco di codice come partecipare a una transazione, senza la necessità di interagire con la transazione stessa. Un ambito di transazione può selezionare e gestire automaticamente la transazione ambientale. A causa della facilità di utilizzo ed efficienza di , si consiglia di utilizzare la classe TransactionScope durante lo sviluppo di un'applicazione di transazione.
Inoltre, non è necessario elencare risorse esplicitamente con la transazione . Qualsiasi gestore di risorse System.Transactions (come SQL Server 2005) può rilevare l'esistenza di una transazione ambientale creata dall'ambito e arruolarsi automaticamente.
La mia domanda è: è possibile avviare il TransactionScope all'interno del codice VBA (o chiamare il metodo aC# tramite interoperabilità COM per istanziare e restituire un oggetto TransactionScope), e quindi procedere a chiamare i vari altri oggetti C# tramite COM Interop, che parteciperà automaticamente alla transazione singola radice?
No, non è possibile farlo in VBA. –
Potresti elaborare (spero di non essere un tipo che ti chiede di dimostrare un negativo) – tbone
Ho cancellato la mia risposta perché non penso che siamo sulla stessa pagina, capendo che cos'è TransactionScope per C# e cosa sarebbe in VBA. ADODB implementa il meccanismo per il rollback delle modifiche durante una Transazione ma non è possibile eseguire il wrapping di un blocco di qualsiasi codice VBA in TransactionScope e ripristinarlo se la Transazione non riesce ... –