What you need to understand is that a DataReader is a live connection to the database, the connection must remain open while you use the reader. The method in the MySql.Data.dll only tries to close the connection if an error happens, it is up to you to close the connection when you are finished with the DataReader to prevent leaking connections from the connection pool. If they closed the connection in that method the reader would not work because a DataReader needs a live connection while reading the data. It is a fast forward only cursor through the data.
Best way to do that is
using(IDataReader reader = SomeMethodThatGetsADataReader())
{
while (reader.Read())
{
//use the data
}
}
by using the using statement it will close the reader even if an error happens.
If Databinding to a UI control you don't need the while(reader.Read()) because .DataBind() will do that for you, but all use of the reader should be inside the using statement
Hope it helps,
Joe