2010-11-21 7 views
0

Je me demandais si c'était une bonne idée de maintenir une connexion à la base de données (System.Data.SqlClient.SqlConnection()) ouverte ou s'il est recommandé de fermer la connexion après l'avoir utilisée et de l'ouvrir à nouveau ? (Remarque: Mon application fonctionnera en continu pendant plusieurs jours/mois). Je suis un peu poussé à le laisser ouvert. Quelle est la meilleure solution?C# connexion à la base de données

Répondre

1

ressources Vous absolument ouvrir vos connexions le plus tard possible, et les fermer le plus rapidement possible. Cependant, vous devez non seulement les fermer lorsque vous avez terminé, mais vous devez les fermer même entre des commandes étroitement liées, s'il y a un autre code s'exécutant entre les deux. En fait, laissez-moi le dire comme ceci: Fermez vos objets ADO.NET Connection aussi rapidement et fréquemment que vous le pouvez. (c'est-à-dire, ne faites pas des choses évidemment stupides pour fermer des connexions qui ne devraient évidemment pas être fermées)

Par défaut, le fournisseur ADO.NET pour SQL Server (ainsi que la plupart des autres fournisseurs importants) fournit un pool de connexions. . Cela gérera réellement la création et la destruction de ces connexions pour vous - mais seulement si vous les fermez lorsque vous avez terminé.

Si vous enveloppez la création et l'utilisation de vos objets de connexion dans using blocs, cela est facile à faire ...

using(SqlConnection conn = new SqlConnection(...)) 
{ 
    ///Open and use the connection 
} //the 'using' causes it to automatically be closed. 
+0

Je trouve le dernier exemple de code avec le bloc 'using' de prêter à confusion:' using' ne sera pas '.Open()', ni '.Close()' une connexion, ces opérations doivent encore être effectuées manuellement. – stakx

+2

L'instruction 'using' provoque la fermeture automatique de la connexion. Il n'est pas nécessaire d'appeler explicitement 'Close()' lorsque vous appelez 'Dispose()', ce que fait la construction 'using'. –

3

En général, jetez-le quand vous en avez fini avec, et ne vous inquiétez pas. Par défaut, ADO.NET implémente connection pooling, donc la connexion est maintenue ouverte dans les coulisses afin de vous épargner la pénalité de performance d'ouvrir de nouvelles connexions tout le temps.

Une autre raison de fermer les connexions dans votre code - si vous perdez la connectivité à votre serveur de base de données lorsque vous n'utilisez pas la connexion, vous ne rencontrerez pas d'erreur, ce qui pourrait arriver.

0

Ouvrez la connexion si vous avez besoin, ne devriez pas perdre ;-)

Questions connexes