【发布时间】:2011-11-02 11:58:31
【问题描述】:
我在两个不同的网络 Db1 和 Db2(远程数据库)上有一个 Web 服务器和两个 DB 服务器。
- DB1:SQL Server 2008 R2,操作系统:Windows Server 2003 SP2
- DB2:SQL Server 2000,操作系统:Windows Server 2003 R2
- Web 服务器:Windows Server 2003 R2
我想在这些数据库中插入两条不同的记录,我使用的是TransactionScope。
using (TransactionScope tscope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//open connection db 1
//insert into db1
//open connection db2 -- the problem is here
//insert into db2
tscope.Complete();
}
当我跟踪源代码时,在第一个数据库中插入成功,但是当第二个连接想要打开时,我遇到了以下错误。
错误:
事务已被隐式或显式提交或中止。
我已配置 MSDTC、Distributrd 事务协调器,一切正常。我可以在我的数据库服务器中进行分布式事务,我没有问题。 TransactionScope 有什么问题?请帮帮我。
第一个连接是 LINQ TO SQL:
DataClassesDataContext Dac = new DataClassesDataContext();
Dac.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionCs"].ConnectionString;
tbl_KargahDistribution Workshop = new tbl_KargahDistribution();
Workshop.WpCode = Bodu.WpRealCode;
Workshop.State = Bodu.BduState;
Workshop.City = Bodu.BduCity;
Workshop.Town = Bodu.BduTown;
Workshop.SubSystem = Bodu.BduSubSystem;
Dac.tbl_KargahDistributions.InsertOnSubmit(Workshop);
Dac.SubmitChanges();
第二个连接是:
Queries Qu = new Queries();
SqlCon = new SqlConnection(BoBaz.BazConnectionString);
SqlCon.Open();
string sq = Qu.InsertWorkshopBaseInfo();
SqlCom = new SqlCommand(sq, SqlCon);
【问题讨论】:
-
您能否详细说明您的连接是如何打开的?
-
你试过玩
SqlConnection.BeginTransaction()、Transaction.Current.EnlistVolatile()等吗? -
我刚刚使用了 enlist=false;在第二个连接字符串中,我没有收到任何错误消息,问题已解决。但我认为当我设置 enlist=false;我的第二个连接不会成为交易的一部分,所以我没有使用它。
标签: c# .net sql-server ado.net transactionscope