我有一个使用 SQL Server 2008 的 ASP.Net 2.0 Web 窗体应用程序。该应用程序有一个 UI 层和数据访问层。我使用 Enterprise Libray 5.0 来保存数据。
最近我的网站运行得很慢,尤其是在可能有 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();
有人可以看看上面的代码,让我知道如何正确关闭我的数据库连接,或者我已经在这样做了吗?
谢谢你们的帮助。