我有一個使用SQL Server 2008的ASP.Net 2.0 Web窗體應用程序。該應用程序有一個UI層和數據訪問層。我使用Enterprise Libray 5.0來保存數據。關閉SqlDataReader
最近我的網站運行速度非常慢,尤其是在頁面上可能有15-20個獨立的讀取數據庫。我非常擔心我的SqlDataReader數據庫連接沒有正確關閉。以下是代碼如何工作的示例。請注意,如果您發現連接泄露方面的任何問題,請告訴我們。
數據訪問類
Public Class DataAccess
Private db As Database = DatabaseFactory.CreateDatabase()
Public Function ExecuteDataReader(ByVal params() As SqlParameter, ByVal SProc As String) As SqlDataReader
Dim i As Integer
Dim dr As SqlDataReader = Nothing
Dim cmd As DbCommand
cmd = db.GetStoredProcCommand(SProc)
cmd.CommandTimeout = 120
For i = 0 To params.Length - 1
db.AddInParameter(cmd, params(i).ParameterName.ToString, params(i).DbType, params(i).Value)
Next
dr = TryCast(DirectCast(db.ExecuteReader(cmd), RefCountingDataReader).InnerReader, SqlDataReader)
Return dr
End Function
UI代碼頁
Dim drSource As SqlDataReader = Nothing
Try
Dim params(0) As SqlParameter
params(0) = New SqlParameter("@applicant_id", Session("ApplicantID"))
drSource = DataAccess.ExecuteDataReader(params, "sp_get_date_last_login")
If drSource.HasRows Then
drSource.Read()
'Do code
End If
Finally
If Not (drSource Is Nothing) Then
drSource.Close()
End If
End Try
背後,我試圖把下面的代碼到我ExecuteDataReader方法,但這然後關閉前SqlDataReader中它有機會做一個閱讀
if (cmd.Connection.State == ConnectionState.Open)
cmd.Connection.Close();
有人可以看看上面的代碼,讓我知道如何正確關閉我的數據庫連接,或者我已經在做它?
感謝您的幫助人員。
說着,我剛剛進去看了幫助與EnterpriseLibrary幫助的ExecuteReader()方法沒有辦法做我建議的。該方法的每個重載都有以下警告:'完成後,調用者有責任關閉連接和讀取器。'你需要直接進入ADO.NET來完成我的建議。 –
感謝您的幫助 – tgriffiths