2009-12-20 80 views
1

我正在使用下面的代码更新第二个表(Info2)与从第一个表中使用的标识(info2.Id = info.Id;) 。当执行第二次保存(info2.Save())时,出现错误:“已经有一个与此命令关联的打开DataReader,必须先关闭它”。 任何人都可以看到我可能做错了什么。SubSonic事务 - 插入第二个表与第一个表中的返回标识

亚音速版本3.0.0.3和SQL Server 2005

感谢

   using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope()) 
       { 
        using (TransactionScope ts = new TransactionScope()) 
        { 
         Info info = new Info(); 
         info.Desc = "Some information"; 
         info.Save(); 

         Info2 info2 = new Info2(); 
         info2.Id = info.Id; 
         info2.Desc = "More information"; 
         info2.Save(); 

         ts.Complete(); 
        } 
       } 

回答

0

看起来你已经得到了的TransactionScope和SharedDbConnectionScope以错误的方式,尝试:

using (TransactionScope ts = new TransactionScope()) 
{ 
    using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope()) 
    { 
    Info info = new Info(); 
    info.Desc = "Some information"; 
    info.Save(); 

    Info2 info2 = new Info2(); 
    info2.Id = info.Id; 
    info2.Desc = "More information"; 
    info2.Save(); 

    ts.Complete(); 
    } 
} 
+0

我认为这个错误将永远跟随亚音速用户。前段时间在文档中是错误的。为了记住正确的顺序,我总是记得Connection需要知道事务,因此事务首先进行。通过取消TransactionScope行中的括号。使用嵌套使用子句使其更具可读性。 – 2010-09-01 20:54:09

0

根据我在评论中写的内容,我能够实现这个工作的唯一方法是首先使用TransactionScope,然后使用SharedDbConnectionScope(感谢Adam)并添加MultipleA ctiveResultSets = TRUE; (SQL Server 2005)添加到连接字符串。

有人有什么更好的解决方案或其他建议吗? 谢谢

 try 
     { 
      using (TransactionScope ts = new TransactionScope()) 
      { 
       using (SharedDbConnectionScope scs = new SharedDbConnectionScope()) 
       { 
        Info info = new Info(); 
        info.Desc = "Some information"; 
        info.Save(); 

        //Test for rollback 
        //throw new Exception("STOP"); 

        Info2 info2 = new Info2(); 
        info2.Id = info.Id; 
        info2.Desc = "More information"; 
        info2.Save(); 

        ts.Complete(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
相关问题