8
votes

Y a-t-il besoin de fermer une DBConnection si une clause utilisant est utilisée?

Dupliqué possible:
utilisera un bloc Fermer une connexion de base de données?

est db.close () inutile dans ce qui suit? xxx


2 commentaires

Non, en utilisant dans la mise en oeuvre de la méthode de DBConnection, appelle db.close (). C'est inutile


Voir cette excellente explication de Idisposable: Stackoverflow.com/a/538238/110933


5 Réponses :


2
votes

Pour ce que je sais, lorsque Dispose () est appelé, fermeture () est effectué automatiquement.
Donc db.close (); n'est pas nécessaire ici.


0 commentaires

1
votes

à la brace de fermeture Le Dispose () est appelé.

Je pense que dans le dbconnection Le Dispose méthode vérifiera également si la connexion est fermée. Donc non, ce n'est probablement pas nécessaire, mais je pense personnellement que c'est une bonne pratique et améliore la lisibilité et cela n'affecte pas les performances, car le fermer sera appelé d'une manière ou d'une autre.


0 commentaires

12
votes

Y a-t-il besoin de fermer une DBConnection si une clause utilisant est utilisée? P>

Non, il n'est pas nécessaire de fermer une DBConnection si une clause utilisant est utilisée? p>

et p>

Oui, il est inutile ici car lorsque la portée de en utilisant extrémités, la connexion disposera de la signification de fermeture et de libération de toute la mémoire. P>

Etant donné que dbconnection code> Implements Idisposable code> Interface, Fermer fonctionne dans le Dispose code> méthode de dbconnection code >. p>

mais si certaines lignes sont après la ligne de fermeture, il est utile p> xxx pré>

mais ici, il est utile p> xxx

Dans ce cas, vous pouvez faire P>

using (DbConnection db = GetDbConnection())
{
  // do data-access stuff
  // ...

}

// Some more code which was previously inside using section.


9 commentaires

+1 Pour une conception belle pour fermer manuellement au cas où plus de code n'utilise pas la connexion. Cependant, dans ce cas, il est préférable de ne pas inclure ce code dans l'utilisation du bloc.


@Aphelion: Oui, le code ci-dessous ne doit sûrement pas être dans le bloc


Pourquoi un autre code ci-dessous DB.Close () est utile?


@Cuongle: peut être un code qui fonctionne sur les valeurs extraites après avoir tiré une certaine requête à travers cette connexion.


@Nikhilagawal bon point. Dans ce cas, je recommanderais de stocker les résultats en dehors du en utilisant la portée .


Dans ce cas, il lancera une exception parce que la connexion est réellement proche, toujours confuse


@Cuongle: Que se passe-t-il si ces résultats sont récupérés avant la fermeture de la connexion.


Si ces résultats sont récupérés avant la connexion, ce n'est pas le cas "Plus de code ci-dessous DB.Close () est utile".


@Cuongle: Ici, plus de code n'est pas utile. Si un code est après db.close (); puis la fermeture manuellement est utile.



1
votes

code extrait de la mise en oeuvre d'élimination du SQLConnection (dérivé de dbconnection ) Classe: xxx

Le en utilisant < / Code> Le mot-clé utilise l'interface iDisposable . La méthode ci-dessus est la méthode mise en œuvre. Il fermera la connexion.


0 commentaires

4
votes

juste pour être sûr d'avoir vérifié le code :) xxx

Il s'agit de la mise en œuvre de sqlconnection qui hérite de dbconnection . Comme vous pouvez le constater, il est ceci.close () Méthode :)


3 commentaires

Je me demandais ici, à l'aide d'appels d'instruction Disposez () ou Dispose (élimination de bool)


@Aphelion: Pls pourriez-vous également répondre à ce sujet?


@Cuongle il appellera Dispose () qui est public. Sa mise en œuvre appellera alors Dispose (true) .