【发布时间】:2010-10-15 05:19:39
【问题描述】:
编辑:我只访问 1 个数据库,但正在创建 DTC 事务。我可以在 DTC 事务列表 GUI(组件服务插件)中看到它。这是为什么呢?
我需要对 1 个数据库执行事务(几个插入命令)。
我应该使用 TransactionScope 还是 IDbTransaction (connection.BeginTransaction)?
TransactionScope 似乎更新了……但它应该只用于两阶段提交吗?
谢谢
【问题讨论】:
编辑:我只访问 1 个数据库,但正在创建 DTC 事务。我可以在 DTC 事务列表 GUI(组件服务插件)中看到它。这是为什么呢?
我需要对 1 个数据库执行事务(几个插入命令)。
我应该使用 TransactionScope 还是 IDbTransaction (connection.BeginTransaction)?
TransactionScope 似乎更新了……但它应该只用于两阶段提交吗?
谢谢
【问题讨论】:
在绝大多数情况下,TransactionScope 更易于使用,尤其是与“使用”块结合使用时。
但是,如果您使用 SQL Server 2000,请小心。它不能很好地与 TransactionScope 配合使用,并且总是会升级为分布式事务。
有关详细信息,请参阅this link。
【讨论】:
只要您使用单个连接并且在 TransactionScope 期间不关闭并重新打开,它就不应升级为分布式事务。如果您的机器上没有运行 DTC 服务,它会在尝试提升时抛出异常。如果 DTC 正在运行,除了稍作停顿之外,您将不会更明智地进行促销。
【讨论】:
TransactionScope 仅在检测到多个连接时才会升级为分布式事务。这意味着对于本地事务,TransactionScope 与 BeginTransaction 一样轻量级,并且 TransactionScope 更易于使用。
【讨论】: