I used to close an open datareader using the try/catch/finally block:
开发者_如何转开发 Dim dr As MySqlDataReader = Nothing
Try
dr = DBConnection.callReadingStoredProcedure("my_sp")
Catch ex As Exception
' the caller will handle this
Throw ex
Finally
If dr IsNot Nothing Then dr.Close()
End Try
But I think it should be cleaner (and somewhat faster) to use the "Using" VB keyword:
Using dr As MySqlDataReader = DBConnection.callReadingStoredProcedure("my_sp")
End Using
' dr is surely disposed, but is it closed?
Does the IDispose interface (required by Using) perform a Close on the DataReader?
The object will be disposed. Yes, this closes the DataReader.
Reader will be closed, but this is not necessary for underlaying database connection because it is managed with ADO.NET connection pool. Check this answer for more information: C# MySqlConnection won't close
精彩评论