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 }