Si un SqlCommand est exécuté et expire, le SqlConnection respectif est-il fermé et/ou éliminé?Si une SqlCommand est exécutée et expire, le SqlConnection respectif est-il fermé et/ou éliminé?
2
A
Répondre
6
Sauf si vous avez votre emballage SqlConnection dans un communiqué using
, vous êtes toujours responsable de la fermeture et de la disposition de la connexion (comme toute autre exception).
Vous pouvez également utiliser un try/catch/finally
bloc:
try
{
// Create and execute your SqlCommand here
}
catch(SqlException ex)
{
// Catch the timeout
}
finally
{
// Close and Dispose the SqlConnection you're using
}
Mais using
est beaucoup plus propre et élimine automatiquement:
using(SqlConnection conn = new SqlConnection())
{
// Do your work here.
// The SqlConnection will be closed and disposed at the end of the block.
}
5
Non, vous devez toujours nettoyer après vous-même. L'utilisation d'un bloc à l'aide entraînera à être mis au rebut si:
using (SqlConnection connection = new SqlConnection(...))
{
// ...
}
0
Tout cela devrait être enroulé autour d'une clause finally après l'exception afin que vous Fermez votre connexion et nettoyez toute ressource objet SQL. Regardez try/catch/finally et mettez le code de nettoyage dans votre déclaration finale.
Donc, il n'est même pas fermé? –
Non ce n'est pas. (pourquoi ai-je besoin de 15 caractères!) – JonH
Je ne suis pas sûr à 100%, mais appeler 'SqlConnection.Dispose()' appelle aussi 'SqlConnection.Close()'. Donc, le bloc utilisant est efficace à 100%. –