Is the SqlClient.SqlDataReader a .NET managed object or not? Why do we have to call the Close() method explicitly close an open connection? Shouldn\'t running out of scope f
The 'managed' resource referred to by the term 'managed code' is memory. That's it. Any other scarce resource needs to be wrapped with the disposable pattern, including database connections.
The reason this is a problem for you is that the garbage collector doesn't run for every object the moment it goes out of scope. It's much more efficient to collect more items less frequently. So if you wait for the collector to dispose your objects (and yes, if you implement idisposable it eventually will) you maybe be holding a number of database connections open much longer than you realize.