2010-01-26 71 views
1

我有一個測試控制檯應用程序正在執行SQL腳本來創建數據庫及其表,然後插入數據。我使用DAO創建,檢索,更新和從表中刪除,然後嘗試刪除數據庫,但它不能,因爲它表示它當前正在使用。我如何殺死連接?通過調試和運行一個sql腳本來查看總連接數,我已經將它縮小到這段代碼,而不是終止連接。即使它表示連接已被清除,數據庫仍表示它仍處於連接狀態。關閉SQL連接(NHibernate)

foreach (ISessionFactory factory in this.connections.Values) 
{ 
    factory.Close(); 
} 

this.connections.Clear(); 
this.connections = null; 
+0

通常情況下,你沒有關閉的SessionFactory 。爲什麼你有多個sessionfactories?您的代碼中可能存在其他地方的開放連接。 – Paco 2010-01-26 22:33:11

回答

1

NHibernate自己管理所有的數據庫連接。它按照它認爲合適的方式打開和關閉數據庫,但您可以嘗試調用Session.Disconnect以使其與ADO.NET連接斷開連接。

但是,如果您啓用了連接池,這通常是默認的連接行爲,則連接將只返回到連接池,而不會釋放,並且仍然會顯示爲連接,所以您將不得不清除連接池。

不幸的是,我不知道,如果你能做到這一點直接通NHibernate的,但你可以使用一個SqlConnection對象發出ClearPool或ClearAllPools打電話......

+0

謝謝!我最初是在代碼中清理池,它不工作,所以我嘗試在連接字符串中使用Pooling = false,它似乎有伎倆。爲什麼它在連接字符串中工作,而不是在代碼中擊敗我。 – Sarah 2010-01-27 16:37:24

+3

連接池是一件好事。池中的連接不要讓任何事務打開或消耗任何資源,所以你不需要「清理」它。另一方面,當連接在池中可用時,您也不必創建新的連接。 「清理」池肯定會損害性能 – 2013-07-19 07:12:45