我一直在使用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来强制处置托管资源,而不是等待垃圾回收器