首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭SqlDataReader

关闭SqlDataReader
EN

Stack Overflow用户
提问于 2012-10-25 10:05:17
回答 1查看 2.4K关注 0票数 0

我有一个使用Server 2008的ASP.Net 2.0WebForms应用程序。应用程序有UI层和数据访问层。我使用EnterpriseLibray5.0来持久化数据。

最近,我的站点运行得非常慢,特别是在可能有15-20个从数据库中单独读取的页面上。我非常担心我的SqlDataReader数据库连接没有被正确关闭。下面是代码如何工作的示例。请看一看,并告诉我,如果你发现它在泄漏连接方面的任何问题。

数据访问类

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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。

代码语言:javascript
复制
if (cmd.Connection.State == ConnectionState.Open)
            cmd.Connection.Close();

请有人看看上面的代码,让我知道如何正确地关闭我的数据库连接,或者我已经在这么做了?

谢谢你们的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 11:45:13

您是否尝试过获得对ExecuteReader的底层调用以接受CommandBehavior.CloseConnection参数?至少这将确保连接在DataReader也关闭时关闭。这将依赖于从ExecuteDataReader()传递回来的ExecuteDataReader的使用者显式地关闭它或通过使用块进行处置。

或者,尝试在drSource.Close()行后面的代码中添加以下内容:

代码语言:javascript
复制
 drSource.Connection.Close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13066195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档