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



我一直在使用SQLDataReader从数据库中获取一些数据。一旦我使用连接的阅读器,我只关闭连接,而不是阅读器。我们是否有连接泄漏的可能性

下面是我使用的代码
 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

不,关闭连接就足够了,但更好的方法是使用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框架垃圾处理收集器(GC),而不需要任何额外的编码。你不需要a管理资源的使用块。但是,您仍然可以使用使用block来强制处置托管资源,而不是等待垃圾回收器

最新更新