我有一個存儲過程用於通過鏈接服務器同步來自另一個系統的數據。我在使用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