web-dev-qa-db-fra.com

Connexion de fermeture ADO.net lors de l'utilisation de "Utilisation"

Je fais mes méthodes d'accès à la base de données sur SQL Server comme celle-ci

  using (SqlConnection con = new SqlConnection(//connection string)
  {
    using (SqlCommand cmd = new SqlCommand(storedProcname, con))
     {
       try{
           con.open();
           //data reader code
       }
       catch
       {

       }
     }
  }

Dois-je me fermer ou éliminer SQLCOMMAND ou utiliser la déclaration à l'aide de cela pour moi? Je ne veux tout simplement pas que la connexion suspendue merci merci

31
twal

Le using prendra en charge pour vous. Sous la hotte, SqlConnection.Dispose() appelle la méthode SqlConnection.Close() méthode et SqlCommand.Dispose() appels SqlCommand.Close().

Comme arrière-plan supplémentaire, une instruction using est le sucre syntaxique pour un try ... finally qui dispose de l'objet IDisposable dans le finally.

57
Phil Hunt

De côté, vous pouvez rendre le code plus concis et lisible comme suit:

 using (SqlConnection con = new SqlConnection(/*connection string*/))
 using (SqlCommand cmd = new SqlCommand(storedProcname, con))
 {
    //...
 }
12
Dan Bryant

Comme Phil a dit, l'utilisation de la clause s'en occupera pour vous. Lorsqu'il est compilé, il enveloppe la connexion Créer dans un essai. Enfin et place l'appel d'élimination de la connexion à l'intérieur de l'intérieur.

Pour plus d'informations, vous pouvez voir le à l'aide de l'article de déclaration de MSDN .

4
NotMe

Oui, votre code fermera la connexion, cependant, qui signifie simultanément replacer sur le pool de connexion pour être vraiment fermé plus tard.

Si vous exécutez cet extrait de code, puis faites un sp_who et observe que votre connexion est toujours là, ce serait pourquoi.

Si vous avez absolument besoin de la connexion correctement fermée (un étui de bord pour être sûr), utilisez la méthode Clearallpools Méthode statique de THS SQLConnection

3
Ralph Shillington

Using _ keyword fermera automatiquement la connexion pour vous, de sorte que vous n'avez pas à vous soucier d'appeler connection.close() à la fin à chaque fois.

2
PUBG

quand la portée

using (SqlConnection con = new SqlConnection(//connection string) 
{
}

la volonté sera terminée, la connexion sera automatiquement disposée par l'exécution. alors ne vous inquiétez pas

1
TalentTuner

Je pense que "utiliser" n'était pas requis pour SQLCOMMAND. "Utiliser" pour SQLConnection aurait fait le travail pour vous seul. En fait, votre connexion est soumise au pool de connexion.

0
Kunal Uppal