在.NET中,当我们使用TransactionScope时,我们可以跨多个连接共享相同的事务。
using(TransactionScope tran = new TransactionScope()) {
//this method open a new connection
CallAMethodThatDoesSomeWork();
//this method open another new connection
CallAMethodThatDoesSomeMoreWork();
tran.Complete();
}
考虑到事务需要特定的连接才能在数据库中
我的问题与这个话题有关。我有一台web服务器、一台数据库服务器和一台远程数据库服务器。我希望在本地和远程服务器之间有一个分布式事务。我为数据库服务器配置了MSDTC,并且我可以在具有链接服务器的数据库服务器中使用分布式事务。但是,当我使用Transaction scope in system.transactions名称空间时,当我打开第二个连接(远程连接)时,我会遇到以下错误。
error:
The transaction has already been implicitly or explicitly committed or aborted.
简化代码:
using (Transa
我试图使用SQL server 2000为单个Oracle链接服务器执行分布式事务,我想出了以下脚本:
BEGIN DISTRIBUTED TRANSACTION;
SET XACT_ABORT off;
GO
SELECT MAX(DEPTNO)+1,
FROM [WSF08_CONTA_ORADATA_II]..[SCOTT].DEPT
SET XACT_ABORT on;
GO
COMMIT TRANSACTION;
脚本一运行,我就会得到以下错误,然后是冻结和关闭连接。
Msg 7399,第16级,第1状态,第3行
用于链接服务器"OraOL
在具有保存点事务中,我必须与链接服务器中的表进行连接。当我尝试这样做时,我得到了错误消息:
“Cannot use SAVE TRANSACTION within a distributed transaction”
远程表数据很少更改。它几乎是固定的。是否可以告诉SqlServer将此表从事务中排除?我尝试过(NOLOCK)提示,但不能对链接服务器中的表使用此提示。
有人知道一种变通方法吗?我用的是ole SqlServer 2000。
这里发生了一些非常奇怪的事情。
我只是在我正在调试的一些遗留代码周围添加了一个事务作用域,以确保我正在进行的摆弄不会被提交。
这起作用了两次,然后说:
"The transaction manager has disabled its support for remote/network transactions."
在工作/非工作状态之间没有任何代码更改或重建(字面意思是连续3个F5s的web应用程序)。这是连接到remove DB服务器的本地代码。
因此,在不同的项目中完全独立的代码会超时。如果我从这段代码中删除transactionScopes,它运行得很好,但是有了它们