在exception情况下关闭数据库连接的正确方法

如果存在exception,以下代码是否会打开连接?

我正在使用Microsoft SQL紧凑版数据库。

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); } 

当然更好的方法是在try之前声明一个连接对象,在try块内建立一个连接并在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(); } 

您在代码中using块处理SqlCeCommand的方式,您可以对SqlCeConnection执行相同的操作。

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

注意:您可以对using IDisposable类使用using块。

编辑:这和

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

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

使用Using

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

是处理此问题的正确方法,因为连接应始终在最后关闭。 但你不仅要检查conn != null ,还要检查conn state是否为Closed

为什么不在连接和命令周围使用?

您应该使用using语句,它可以轻松处理连接关闭http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx

你必须尝试以下方式。 因为Connection Close In Finally Block

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