c# - 发生异常时关闭数据库连接的正确方法

标签 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 block 中建立连接并在 finally block 中关闭它?

 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 block 的帮助下,您在代码中处理 SqlCeCommand 的方式,您可以对 SqlCeConnection 执行相同的操作。

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

注意:您可以对实现 IDisposable 的类使用 using block 。

编辑:这与

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

关于c# - 发生异常时关闭数据库连接的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681097/

相关文章:

c# - 重用元素和 DataContext

c# - 尝试将 null 分配给可空 int 会导致 "There is no implicit conversion between ' int' 和 'null'“错误

c# - 如何比使用 DynamicInvoke 更快地调用委托(delegate)?

c# - 从 SQL 文件构建数据库

c# - 是否存在处理多对多关系的 MemberExpression 之类的东西?

c# - 序列化不接受不同的命名空间。为什么?

c# - 是否有实时 IIS 流量查看器(或通过 C# 以编程方式获取它的方式)

.NET 用固定空格格式化字符串

t-sql - 如何插入只有一个 IDENTITY 列的表 (SQL Server CE)

c# - 如果不存在,是否创建数据库文件 (.sdf)?