先注意一下,本文是以 ADODB.Recordset 直接用 Connection String 連線做說明,並未透過 ADODB.Connection 來連接資料庫。
ADODB.Recordset 資料庫連線開啟:
Dim rs As New ADODB.Recordset Dim ConnectionString as String = "provider=sqloledb;server=localhost;database=northwind;uid=sa" rs.Open("SELECT * FROM products", ConnectionString, ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly)
ADODB.Recordset 開啟之後,所有 SQL 的動作處理完後,就是要釋放掉 ADODB.Recordset 的資源,但是絕大多數的人會拿以前 Visual BASIC 的釋放方式,也就是:
rs.Close() rs = Nothing
如果在 VB.Net 裡面這樣寫,資料庫連線並不會因此而釋放,正確的釋放方式應該是:
rs.Close() rs.ActiveConnection = Nothing
沒有正確釋放 Connection 會造成 SQL Server 的 Process 一直佔住資源,在系統執行的過程中也可以明顯看到 sqlservr.exe 佔的記憶體直線上昇,一旦到了記憶體的上限值就便會造成系統跟資料庫之間的連線緩慢或是 Timeout 的狀況發生,所以正確的釋放連線對系統來說是非常重要的一件事。
1 comments On [VB.Net] 正確的釋放 ADODB.Recordset 資料庫連線
你好,因為我公司正在經歷這個問題,SqlServr.exe不斷的在吃記憶體,在Google搜尋下,找到您的網站,想請教的是,我是用VB6開發的,應該沒有您所講的.NET沒有正確釋放記憶體,為何還是一直吃下去呢?謝謝您的指教