[导入]经验:使用.net 2.0中的TransactionScope碰到的问题
经验:使用.net 2.0中的TransactionScope碰到的问题
概述:不能在同一个TransactionScope中打开多个连接对象
TransactionScope真的是很方便的,具体的使用也很简单,MSDN上有详细描述。不过我在使用过程中发现了一个问题,那就是无法在同一个TransactionScope中打开多个连接对象。示例代码如下,示例中是连接到同一实例的同一数据库,但连接到不同实例的不同数据库也是同样的结果。
具体原因还需具体分析,我碰到的情况不一定代表就是正确的情况,还请大家批评。
[Test]
public void TestTransactionScope()
{
using (TransactionScope ts = new TransactionScope())
{
string cnstr = @"Data Source=cs1\sqlexpress;Database=fugao_dev;User ID=sa;Password=123;";
SqlConnection cn1 = new SqlConnection(cnstr);
cn1.Open();
using (TransactionScope ts2 = new TransactionScope())
{
SqlConnection cn2 = new SqlConnection(cnstr);
cn2.Open();
}
}
}
[Test]
public void TestTransactionScopeA()
{
using (TransactionScope ts = new TransactionScope())
{
string cnstr = @"Data Source=cs1\sqlexpress;Database=fugao_dev;User ID=sa;Password=123;";
SqlConnection cn1 = new SqlConnection(cnstr);
cn1.Open();
SqlConnection cn2 = new SqlConnection(cnstr);
cn2.Open();
}
}
以上测试都抛出了异常,并且运行时间很长,象死机一下
System.Transactions.TransactionManagerCommunicationException : 与基础事务管理器的通信失败。
----> System.Runtime.InteropServices.COMException : 对 COM 组件的调用返回了错误 HRESULT E_FAIL。
文章来源:http://www.cnblogs.com/andywu/archive/2008/04/14/1152634.html