Question

Je soupçonne une connexion de base de données utilisée dans l'une de nos applications de ne pas toujours être fermée. Je suis allé voir le code et j'ai trouvé une classe DataProvider qui a un objet SqlConnection . La connexion est ouverte dans le constructeur de cette classe et fermée dans sa méthode Dispose (ne jugez pas cela, je sais que garder une connexion ouverte est maléfique, ce n'est tout simplement pas mon code et ce n'est pas le but de la question quand même). La méthode Dispose est implémentée comme suit:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_conn != null)
                _conn.Close();
        }

        _disposed = true;
    }
}

La question est:
Cela garantit-il toujours que la connexion est fermée?
Ce code est-il correct?

Je pense qu'il devrait y avoir _conn.Dispose () appelé - ai-je raison et cela pourrait-il empêcher la fermeture de la connexion (probablement pas)?

Était-ce utile?

La solution

Dispose n'est jamais appelé automatiquement.

La connexion ne sera fermée que lorsque la méthode Dispose de votre objet sera explicitement appelée ou si votre classe est utilisée dans un bloc using ()

Une méthode plus sûre consiste à appeler la méthode de mise au rebut dans votre finaliseur et à vous assurer que celui-ci est supprimé lorsque la méthode Dispose est appelée.

Cet article présente la manière correcte d'implémenter le modèle

.

J'espère que ça aide!

C & # 233; dric

Autres conseils

conn.Dispose (); fermera également la connexion. Vous n'avez donc aucun mal à la changer pour suivre le modèle de disposition.

Mais leur fonctionnement est équivalent, il doit donc y avoir un problème ailleurs.

http://msdn.microsoft .com / fr-us / library / system.data.sqlclient.sqlconnection.close.aspx

  

Si la connexion SQL s'éteint   portée, il ne sera pas fermé. Donc,   vous devez explicitement fermer le   connexion en appelant Close ou   Disposer. Fermer et éliminer sont   fonctionnellement équivalent. Si la   valeur de mise en commun des connexions La mise en commun est   mis à true ou oui, le sous-jacent   la connexion est renvoyée à la   pool de connexion. D'autre part, si   La mise en commun est définie sur false ou no, le   connexion sous-jacente au serveur est   fermé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top