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

时间:2010-04-21 07:41:19

标签: c# .net sql-server-ce database-connection

如果有异常,以下代码是否会打开连接?

我正在使用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();
}

6 个答案:

答案 0 :(得分:29)

SqlCeCommand块的帮助下,您在代码中处理using的方式,您可以对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块。

编辑:这与

相同
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

答案 1 :(得分:8)

使用Using

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

答案 2 :(得分:4)

try
catch
finally

是处理此问题的正确方法,因为连接应始终在结束时关闭。但是,您不仅要检查conn != null,还要检查conn状态是否为Closed

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

foreach(User element in users){
if(element.Type == MyEnum.Label){
        //Your logic
    }else if(element.Type = MyEnum.Button){
        //Your logic
    }