Près de SqlConnection dans le Enfin, lors de l'utilisation de “l'Aide”
Je veux fermer l'occurrence de SqlConnection dans le Enfin, depuis l'aide pas vraiment le fermer et le pool de connexion est pleine. mais je ne le réalisent pas quel est le bon chemin à fo que depuis la conn objet n'est pas accessible à tout plus la enfin, la section.
try
{
using (var conn = new SqlConnection(_dbconnstr))
{
//...
}
}
catch (Exception ex)
{
//...
}
finally
{
conn.Close //?!?!?!?!???
}
Vous avez un autre problème.
Comme mentionné comme une réponse, je vous suggère de vérifier la même chose à propos de DataReaders : la façon dont vous êtes à la fermeture de la Connexion est ok.
Oh, j'ai complètement raté le point de le remplir à l'Aide de bloc à l'intérieur d'un try{ } bloc. Je l'ai lu parce que le support sont en retrait d'une étrange façon.
using
est implémentée en interne comme un try
/finally
paire, avec de Disposer d'être appelé dans le finally
bloc. Et pour SqlConnection
, Close
et Dispose
sont interchangeables.Comme mentionné comme une réponse, je vous suggère de vérifier la même chose à propos de DataReaders : la façon dont vous êtes à la fermeture de la Connexion est ok.
Oh, j'ai complètement raté le point de le remplir à l'Aide de bloc à l'intérieur d'un try{ } bloc. Je l'ai lu parce que le support sont en retrait d'une étrange façon.
OriginalL'auteur Erez | 2011-04-06
Vous devez vous connecter pour publier un commentaire.
est expaded:
Donc vous devez gérer les erreurs, mais vous pouvez oublier la fermeture de la connexion.
Dispose
dans lefinally
bloc jeter unNullReferenceException
et de cacher la véritable erreur. Le compilateur se met à l'affectation à l'extérieur de latry
bloc, puis effectue une valeur null vérifier dans lefinally
bloc de trop, avant d'appelerDispose
.)OriginalL'auteur Andrey
Vous n'avez pas besoin de fermer
conn
dans lefinally
bloc. Leusing
bloc de gérer la fermeture de la connexion pour vous. (En fait, vous n'avez probablement pas besoin de latry...finally
à tous dans ce cas, sauf si vous avez d'autres ressources qui doivent traiter avec dans lefinally
.)La
using
bloc de traduire quelque chose comme ceci:La
Dispose
méthode de laSqlConnection
objet sera appelée dans lefinally
bloc, et leDispose
méthode fait appelClose
pour vous.Je suis le seul à en expliquant ce qui est généré par le compilateur, et qui effectue la tâche immédiatement avant le
try
bloc, exactement comme je l'ai montré. Vous devez vérifier les faits avant de downvoting!OriginalL'auteur LukeH
De sortir d'une aide de bloquer les appels
.Dispose()
sur l'objet, pour unSqlConnection
va fermer la connexion et toutes les ressources.De sorte que le
try
,finally
bloc n'est pas nécessaire.OriginalL'auteur CD..
Selon ma compréhension de la méthode dispose() de l'objet de connexion fermer la Connexion. Vous n'avez pas besoin de Connexion d'appel.Fermer explicitement.
c'est vrai. Je n'avais pas pensé à ce sujet. Mais si nous sommes à l'aide de "l'aide" mot-clé, pas de point d'appel de la Connexion.Close() à droite?
Yep, c'est correct
OriginalL'auteur Anuraj
Autant que je sache, le suivant à l'aide de déclaration:
Est équivalent à:
Jørgensen: cela signifierait assez bien tous réponse à cette question est mal par votre raisonnement? Mal. t tout pour faire avec (au moins)
try / finally
.Non, seulement environ la moitié d'entre eux. (À noter également le commentaire a été mis à jour)
Jørgensen: Votre premier commentaire n'a pas de sens - tout newing en place une instance et s'attendent à être en mesure d'atteindre le
Dispose
appeler n'est pas commentusing
travaux:using
garantiesDispose
sera appelé, et ce qui se passe à l'intérieur d'unfinally
bloc.OriginalL'auteur Grant Thomas
La façon dont vous êtes à la clôture de la connexion avec
Using
est Ok. Peut-être que vous pourriez avoir oublié de fermer certains DataReaders à la place ?OriginalL'auteur Larry