我有一个存储过程用于通过链接服务器同步来自另一个系统的数据。我在使用Quartz.net运行任务的Windows服务中使用NHibernate执行此调用。这些任务之一是同步数据的任务,它实际上只是存储过程的调用:在NHibernate中调用Session.CreateSQLQuery ExecuteUpdate失败
using(var tx = Session.BeginTransaction()) {
Session
.CreateSQLQuery("exec dbo.spSyncData")
.ExecuteUpdate();
tx.Commit();
}
此存储过程不带参数,也不返回结果。 当完成此呼叫时,我然后加载被同步这样的数据,,,
return Session.CreateCriteria(typeof(MyData))
.Add(Restrictions.Eq("Status", Status.Waiting))
.List<MyData>();
然而,这种呼叫失败,与该消息的ADOException“无效试图调用时读取器被关闭阅读”。
我发现存储过程设置为SET NOCOUNT ON,所以我改变了这一切,现在我得到一个不同的异常...
“已经有与此命令必须先关闭相关联的打开的DataReader “。
当提交sproc调用时会发生此错误。
任何想法? 谢谢,史蒂夫
更新:我发现与跨多个线程会话对象的访问有关的一些问题,我没有预料到。我能够清理这些,但没有机会再次尝试使用Session.Connection对象执行IDbCommand的建议。之前已经失败了,但我认为这也与线程问题有关。我希望很快回到那个尝试。
你用什么样的代码来创建你的nhibernate会话?它是网络还是winforms? – JSC 2008-12-12 18:36:21