Subsonic 亚音速事务-使用第一个表的返回标识插入第二个表
我使用下面的代码用第一个表中使用的标识(Info2.Id=info.Id;)更新第二个表(Info2)。当执行第二次保存(info2.save())时,我得到一个错误:“已经有一个与此命令关联的打开的DataReader,必须先关闭它。”。 谁能看出我做错了什么 亚音速版本3.0.0.3和SQL Server 2005 谢谢Subsonic 亚音速事务-使用第一个表的返回标识插入第二个表,subsonic,subsonic3,Subsonic,Subsonic3,我使用下面的代码用第一个表中使用的标识(Info2.Id=info.Id;)更新第二个表(Info2)。当执行第二次保存(info2.save())时,我得到一个错误:“已经有一个与此命令关联的打开的DataReader,必须先关闭它。”。 谁能看出我做错了什么 亚音速版本3.0.0.3和SQL Server 2005 谢谢 using (SharedDbConnectionScope sharedConnectionScope = new SharedDbCon
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();
}
}
看起来您的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();
}
}
根据我在评论中所写的内容,我能让这项工作正常进行的唯一方法是首先使用TransactionScope,然后使用SharedDbConnectionScope(感谢Adam),并添加MultipleActiveResultSets=True;(SQLServer2005)连接到连接字符串 有谁有更好的解决方案或其他建议吗? 谢谢
我认为这个错误将永远伴随着亚音速用户。前一段时间的文件里是错误的。为了记住正确的顺序,我总是记得连接需要知道事务,因此事务首先进行。通过从TransactionScope行中删除括号。使用嵌套的using子句使其更具可读性。
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);
}