关闭SqlConnection而不关闭SQL reader会导致连接泄漏吗?

3

我一直在使用SQLDataReader从数据库中获取数据。一旦我使用了Reader和连接,我只关闭了连接而没有关闭Reader。这样会有可能出现连接泄漏吗?

以下是我使用的代码:

 Public Sub Get_SomeData(ByVal sCon As String,ByRef ObjectToReturn As SomeClass)
        Dim sqlCon As SqlConnection = New SqlConnection(sCon)
        Dim sqlR As SqlDataReader = Nothing
        Dim sqlCmd As SqlCommand = New SqlCommand
        sqlCmd.CommandType = CommandType.StoredProcedure
        sqlCmd.Connection = sqlCon
        sqlCmd.CommandText = "get_SomeData"
        sqlCon.Open()
        sqlR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection)
        If sqlR.HasRows And sqlR.Read Then
            ObjectToReturn.Property1 = sqlR("Column1").ToString
            ObjectToReturn.Property1 = sqlR("Column1").ToString
            ObjectToReturn.Property1 = sqlR("Column1").ToString
            ObjectToReturn.Property1 = sqlR("Column1").ToString
        End If
        sqlCon.Close()
    End Sub
1个回答

2
不需要,关闭连接就足够了,但更好的方法是通过“Using”语句来实现。相关信息请参考这里
    Using sqlCon = New SqlConnection(sCon)
        Dim sqlR As SqlDataReader = Nothing
        Using sqlCmd = New SqlCommand
            sqlCmd.CommandType = CommandType.StoredProcedure
            sqlCmd.Connection = sqlCon
            sqlCmd.CommandText = "get_SomeData"
            sqlCon.Open()
            Using sqlR = sqlCmd.ExecuteReader()
                If sqlR.HasRows And sqlR.Read Then
                    ObjectToReturn.Property1 = sqlR("Column1").ToString
                    .......
               End If
            End Using
       End Using
  End Using

MSDN文档中关于使用的重要部分

有时您的代码需要一个非托管资源,例如文件句柄、COM包装器或SQL连接。使用Using块可以确保在您的代码完成后处理一个或多个这样的资源。这使它们可供其他代码使用。

托管资源由.NET Framework垃圾回收器(GC)自动处理,无需您编写任何额外的代码。对于托管资源,您不需要使用Using块。但是,您仍然可以使用Using块来强制处理托管资源,而不是等待垃圾回收器。


非常感谢您。很抱歉回复晚了。 - santhosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接