Todos os exemplos acima mostram a mesma fraqueza. Você não usa a instrução de uso que garantirá o correto fechamento e descarte da conexão e demais objetos descartáveis. Se uma ou mais de suas instruções lançarem uma exceção, o código que fecha a conexão não será executado e você poderá terminar com o erro de muitas conexões
Por exemplo
string commandLine = "SELECT * FROM Table WHERE active=1";
commandLine = commandLine.Remove(commandLine.Length - 3);
using(MySqlConnection connect = new MySqlConnection(connectionStringMySql))
using(MySqlCommand cmd = new MySqlCommand(commandLine, connect))
{
connect.Open();
using(MySqlDataReader msdr = cmd.ExecuteReader())
{
while (msdr.Read())
{
//Read data
}
}
} // Here the connection will be closed and disposed. (and the command also)