Manière correcte de fermer la connexion à la firebase database en cas d’exception

Le code suivant laisse-t-il la connexion ouverte s’il y a une exception?

J’utilise une firebase database Microsoft SQL compact edition.

try { SqlCeConnection conn = new SqlCeConnection(ConnectionSsortingng); conn.Open(); using (SqlCeCommand cmd = new SqlCeCommand("SELECT stuff FROM SomeTable", conn)) { // do some stuff } conn.Close(); } catch (Exception ex) { ExceptionManager.HandleException(ex); } 

Une meilleure solution serait sûrement de déclarer un object de connexion avant d’essayer, d’établir une connexion dans le bloc try et de le fermer dans un bloc finally?

  SqlCeConnection conn = null; try { conn = new SqlCeConnection(ConnectionSsortingng); 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(); } 

De la même manière que vous SqlCeCommand dans votre code à l’aide d’un bloc using , vous pouvez faire de même pour SqlCeConnection .

 SqlCeConnection conn; using (conn = new SqlCeConnection(ConnectionSsortingng)) { conn.Open(); using (SqlCeCommand cmd = new SqlCeCommand("SELECT stuff FROM SomeTable", conn)) { // do some stuff } } 

Remarque: Vous pouvez utiliser un bloc using pour les classes qui implémentent IDisposable .

EDIT: Ceci est identique à

 try { conn = new SqlCeConnection(ConnectionSsortingng); conn.Open(); SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandText = "..."; cmd.ExecuteNonQuery(); } finally { conn.Close(); } 

ref: http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection%28VS.80%29.aspx

Utiliser en Using

 using(SqlConnection conn = new SqlConnection()) { //put all your code here. } 
 try catch finally 

est la bonne façon de gérer cela, car la connexion doit toujours être fermée à la fin. mais vous devriez vérifier non seulement que conn != null , mais aussi si conn state n’est pas Closed .

Pourquoi ne pas utiliser une utilisation autour de la connexion ainsi que de la commande?

Vous devez utiliser une instruction using , qui gère la fermeture de la connexion sans tracas http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx

Vous devez essayer de suivre la voie. Parce que la connexion se ferme enfin, bloque

 try { SqlCeConnection conn = new SqlCeConnection(ConnectionSsortingng); conn.Open(); using (SqlCeCommand cmd = new SqlCeCommand("SELECT stuff FROM SomeTable", conn)) { // do some stuff } } catch (Exception ex) { } finally { \\close connection here }