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?
 
     
     
    