Le code suivant laisse-t-il la connexion ouverte en cas d'exception? J'utilise une base de données Microsoft SQL compact edition.Manière correcte de fermer la connexion à la base de données en cas d'exception
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
conn.Close();
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
Sûrement une meilleure façon serait de déclarer un objet de connexion avant l'essai, établir une connexion à l'intérieur du bloc try et fermer dans un bloc finally?
SqlCeConnection conn = null;
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
finally
{
if(conn != null) conn.Close();
}
Je ne peux toujours pas envelopper ma tête autour de cela. De la référence: "Si le SqlCeConnection est hors de portée, il n'est pas fermé.Vous devez fermer explicitement la connexion en appelant Close ou Dispose." Dans votre premier exemple, vous ne fermez pas explicitement la connexion. –
Lors de l'utilisation de l'instruction 'using', elle appelle la méthode' Dispose' sur l'objet utilisé, qui à son tour appelle la méthode 'Close', dans le cas de' SqlCeConnection'. Utilisez un outil tel que ILSpy pour voir quel code est exécuté lorsque 'Dispose' est appelé sur' SqlCeConnection'. Voir la documentation [ici] (http://msdn.microsoft.com/en-us/library/bb300654%28v=vs.100%29.aspx). – shahkalpesh