64 votes

Ne de Fin à l'Aide de fermer et ouvrir la Connexion SQL

Si j'envelopper une occurrence de SQLConnection en Aide, je devrais la fermer ou de la fin à l'aide de la poignée?

using cn as new system.data.sqlclient.sqlconnection()
    cn.open
    '{do a bunch of other stuff with commands and datareaders here}
    cn.close 'Do I need this?
end using

96voto

matt b Points 73770

La sortie d'un aide de bloquer les appels .Dispose() sur l'objet en question (cn dans l'exemple) qui, pour une occurrence de SqlConnection va fermer la connexion et toutes les ressources.

31voto

Darin Dimitrov Points 528142

Plus précisément, l'appel de Céder ou Fermer marquera la physique sous-jacente de connexion comme "not in use" - mais n'a pas vraiment le fermer. Un "Pas en cours d'utilisation" connexion qui n'est pas encore physiquement fermée est donc disponible pour la mise en commun. Par conséquent, l'appel de Disposer serait de retour d'une connexion au pool de connexion.

12voto

Hector Correa Points 10408

Selon MSDN vous n'avez pas besoin de l'instruction close.

"L'exemple suivant crée une occurrence de SqlConnection, l'ouvre, affiche certaines de ses propriétés. La connexion est automatiquement fermée à la fin de l'aide du bloc." -- http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

4voto

Bryan Anderson Points 9044

Alors que le SQL de la méthode dispose fermer la connexion (éventuellement selon darin), vous devez quitter l'appel pour Fermer. La raison en est que vous serez en s'appuyant sur le sous-jacent de la mise en œuvre de Disposer d'appeler à proximité. Voir aussi Ouvert sans la fermeture est comme voir un Nouveau sans Supprimer pour ceux d'entre nous qui ont programmés dans des langages non managés. C'est une odeur de code pour moi.

1voto

Matt Briggs Points 20291

l'aide est juste un raccourci pour try/finally. c'est l'équivalent du code pour ce que vous avez posté

Try
    SqlConnection cn as new system.data.sqlclient.sqlconnection()
    cn.open
    '{do a bunch of other stuff with commands and datareaders here}
    cn.close 'Do I need this?
Finally
    cn.Dispose()
End Try

Disposer est censé prendre soin de toutes les ressources de nettoyage, dans le cas de connexions qu'il va la fermer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X