我一直在使用SQLDataReader来获取数据库中的一些数据。一旦我使用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
答案 0 :(得分: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文档中有关使用
的重要部分有时您的代码需要非托管资源,例如文件 handle,COM包装器或SQL连接。使用块保证 代码完成后处理一个或多个此类资源 跟他们。这使得它们可供其他代码使用。
托管资源由.NET Framework垃圾处理 收集器(GC),您无需任何额外的编码。你不需要 a用于托管资源的块。但是,您仍然可以使用 使用块强制处理托管资源而不是 等待垃圾收集器。