Utiliser MySQLConnection en C # ne se ferme pas correctement

Solution finale:

La connexion a été ajouté au pool de connexion. Alors je l'ai fermé, mais il restait toujours ouvrir physiquement. Avec la ConnectionString Paramètre "mise en commun=false" ou les méthodes statiques MySqlConnection.ClearPool(connexion) et MySqlConnection.ClearAllPools le problème peut être évité. Notez que le problème, c'est que la connexion était encore vivant quand j'ai fermé l'application. Même si je l'ai fermé. Donc, soit je n'ai pas utiliser le regroupement de connexion ou je claire spécifiques de la piscine avant de fermer la connexion et le problème est résolu. Je vais prendre mon temps à essayer de comprendre quelle est la meilleure solution dans mon cas.

Merci à tous ceux qui ont répondu! Il a aidé mon comprendre les concepts de C# mieux et j'ai appris beaucoup de l'apport utile. 🙂

===

Problème D'Origine:

J'ai cherché pendant un certain temps maintenant et je n'ai pas trouvé la solution à mon problème:
Je suis nouveau en C# et essayer d'écrire une classe pour faire les Connexions MySql plus facile. Mon problème est que, après que je l'ouvrir et le fermer. Il est toujours ouverte dans la Base de données et obtient abandonnée.

Je suis en utilisant le 'l'aide de la "déclaration", bien sûr, mais la connexion est toujours ouverte et obtient abandonnée après que j'ai quitter le programme.

Voici ce que mon code ressemble à ceci:

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
    }
}
}

La classe gestionnaire de Base de données ouvre la connexion et il se ferme en cas de cession:

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);
//}

Alors, j'ai vérifié dans le débogueur et le dispose()-méthode est appelée et s'exécute correctement.
Ce qui me manque? Est-je fait quelque chose de mal ou mal compris?

Toute aide est très appréciée!

Salutations,
Simon

P. S.:
Juste au cas où, le DataReader()-méthode (version mise à Jour):

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, j'ai essayé d'utiliser le taux de retour:

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

Et j'ai changé le DataReader-méthode:

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;
                }
            }
        }
    }

Il fonctionne de la manière que je peux récupérer les données, mais j'ai toujours le même problème: La connexion n'est pas fermée correctement. 🙁

source d'informationauteur Skalli