O uso do MySQLConnection em C # não fecha corretamente

Solução final

A conexão foi adicionada ao pool de conexões. Então eu fechei, mas ele ainda permaneceu fisicamente aberto. Com o parâmetro ConnectionString "Pooling = false" ou os métodos estáticos MySqlConnection.ClearPool (connection) e MySqlConnection.ClearAllPools, o problema pode ser evitado. Observe que o problema era que a conexão ainda estava ativa quando fechei o aplicativo. Mesmo que eu fechei. Portanto, ou eu não uso o pool de conexões ou limpo o pool específico antes de fechar a conexão e o problema é resolvido. Levarei um tempo para descobrir qual é a melhor solução no meu caso.

Obrigado a todos que responderam! Isso ajudou a entender melhor os conceitos de C # e aprendi muito com as informações úteis. :)

===

Problema original:

Pesquisei há um tempo e não encontrei a solução para o meu problema: sou novo em C # e tento escrever uma classe para facilitar o MySql Connections. Meu problema é que, após abrir uma conexão e fechá-la. Ele ainda está aberto no banco de dados e é abortad

Estou usando a instrução 'using', é claro, mas a conexão ainda está aberta e é interrompida depois que eu saio do program

Aqui está a aparência do meu código:

using (DatabaseManager db = new DatabaseManager())
{
using (MySqlDataReader result = db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
    foreach (MySqlDataReader result in db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
    {
        //Do stuff here
    }
}
}

O gerenciador de banco de dados da classe abre a conexão e a fecha quando descartada:

public DatabaseManager()
{
    this.connectionString = new MySqlConnectionStringBuilder("Server=localhost;Database=businessplan;Uid=root;");
    connect();
}
private bool connect()
{
    bool returnValue = true;
    connection = new MySqlConnection(connectionString.GetConnectionString(false));
    connection.Open();
}

public void Dispose()
{
    Dispose(true);
}

public void Dispose(bool disposing)
{
    if (disposing)
    {
        if (connection.State == System.Data.ConnectionState.Open)
        {
            connection.Close();
            connection.Dispose();
        }
    }
    //GC.SuppressFinalize(this);//Updated
}
//Updated
//~DatabaseManager()
//{
//  Dispose(false);
//}

Então, eu verifiquei no depurador e o Dispose () - método é chamado e executa corretamente. o que estou perdendo? Existe algo que fiz errado ou mal entendido?

Qualquer ajuda é apreciada!

Saudações, Simon

P.S .: Apenas no caso, o DataReader () - método (versão atualizada):

public IEnumerable<IDataReader> DataReader(String query)
    {
        using (MySqlCommand com = new MySqlCommand())
        {
            com.Connection = connection;
            com.CommandText = query;
            using (MySqlDataReader result = com.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
            {
                while (result.Read())
                {
                    yield return (IDataReader)result;
                }
            }
        }
    }

Ok, tentei usar o retorno de rendimento:

foreach (MySqlDataReader result in db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
    //...
}

E eu mudei o método DataReader:

public IEnumerable<IDataReader> DataReader(String query)
    {
        using (MySqlCommand com = new MySqlCommand())
        {
            com.Connection = connection;
            com.CommandText = query;
            using (MySqlDataReader result = com.ExecuteReader())
            {
                while (result.Read())
                {
                    yield return (IDataReader)result;
                }
            }
        }
    }

Funciona da maneira que posso recuperar os dados, mas ainda tenho o mesmo problema: a conexão não está fechada corretamente. :

questionAnswers(4)

yourAnswerToTheQuestion