【发布时间】:2014-07-25 18:51:48
【问题描述】:
我有一些现有的 c# 代码,我想通过 com 互操作公开,以便可以从 Excel VBA 调用它。由于我将执行许多嵌套的批量更新操作,我需要支持事务,并且为了最大限度地减少 c# 级别所需的重构,我想使用 TransactionScope 方法:
使用事务范围实现隐式事务
http://msdn.microsoft.com/en-us/library/ms172152.aspx
TransactionScope 类提供了一种简单的方法来标记一个块 代码作为参与交易,而无需您 与交易本身进行交互。事务范围可以选择 并自动管理环境事务。由于其易于 使用和效率,建议您使用 开发事务应用程序时的 TransactionScope 类。
此外,您无需使用 交易。任何 System.Transactions 资源管理器(例如 SQL Server 2005) 可以检测环境事务的存在 由作用域创建并自动登记。
我的问题是:是否可以在 VBA 代码中初始化 TransactionScope(或通过 COM 互操作调用 ac# 方法来实例化并返回一个 TransactionScope 对象),然后继续调用其他各种c# 对象通过 COM 互操作,会自动参与单一根事务?
【问题讨论】:
-
不,你绝对不能在 VBA 中这样做。
-
你能详细说明一下吗(希望我不是要求你证明否定)
-
我已经删除了我的答案,因为我认为我们在理解 C# 中的 TransactionScope 以及 VBA 中的含义不一致。 ADODB 实现了在事务期间回滚任何更改的机制,但是您不能将任何 VBA 代码块包装在 TransactionScope 中并在事务失败时将其回滚...
标签: c# sql-server vba excel com-interop