When executing a command that returns multiple result sets, calling GetSchemaTable on the first result set caches the schema for the lifetime of the MySqlDataReader.
using (var cmd = new MySqlCommand("select * from table1; select * from table2;", connection))
using (var reader = cmd.ExecuteReader())
{
do
{
// always returns the schema for 'table1'
var table = reader.GetSchemaTable();
while (reader.Read())
{
}
} while (reader.NextResult());
}