我有一种情况,当我更新用户时,我还必须跟踪对用户所做的所有更改——有点像用户表的活动日志。此活动日志位于同一数据库服务器上的不同数据库中。但是,当我将这 2 个 DB 调用包装在事务范围内时,我得到了一个错误。
所以我想知道是否有办法绕过/解决这个问题?
我有一种情况,当我更新用户时,我还必须跟踪对用户所做的所有更改——有点像用户表的活动日志。此活动日志位于同一数据库服务器上的不同数据库中。但是,当我将这 2 个 DB 调用包装在事务范围内时,我得到了一个错误。
所以我想知道是否有办法绕过/解决这个问题?
愿意分享错误的确切含义吗?无论如何,在我看来,这个用例应该得到 TransactionScope 的支持。据我记得,虽然事务将被提升为分布式事务,并且需要在您的计算机上安装和运行分布式事务协调器服务 ( MSDTC )
编辑:看到错误消息,似乎 2 个数据库位于不同的机器上,因此分布式事务需要通过网络完成/同步。这意味着已安装 MSDTC,但未针对此用例正确配置。在文档中查找它并与您的系统管理员聊天。
如果您使用的是 SQL Server 2008,则可以在没有 MSDTC 的事务范围内包装与同一SQL Server 的连接,前提是您为每个连接使用相同的连接字符串。
要使用相同的连接字符串,您需要在查询中明确指定数据库名称(至少为您的一个数据库),例如
SELECT ... FROM db1..Table1 ...
SELECT ... FROM db2..Table2 ...
您需要确保安装并配置了 MSDTC。通过配置,我的意思是您需要启用网络 DTC 访问权限。
这可以帮助您入门:http ://technet.microsoft.com/en-us/library/cc753866(v=ws.10).aspx
我不相信这是可能的,因为交易只与一个连接相关联。实现此行为所需的是有一个并行过程(即并发线程),每 n 秒读取一次日志数据库