【问题标题】:Does .net SqlCommand.ExecuteReader close connection?.net SqlCommand.ExecuteReader 是否关闭连接?
【发布时间】:2008-10-21 07:07:58
【问题描述】:

在这句话中:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

出现异常时是否关闭连接?

【问题讨论】:

    标签: .net sqlconnection sqlcommand


    【解决方案1】:

    进行“正常”查询的最安全方法是

    using (var conn = new SqlConnection("..."))
    {
        conn.Open();
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "...";
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    // ...
                }
            }
        }
    }
    

    可以在此代码之外捕获异常。

    【讨论】:

      【解决方案2】:

      命令出错的方式有很多。

      如果之前没有出现任何问题,最终将由数据读取器的 Close 方法关闭连接。

      如果在 ExecuteReader 或其调用的任何方法内部发生异常,在构造实际的 DataReader 对象之前,则不会,连接不会关闭。

      如果出现异常,我不相信它会关闭连接。

      【讨论】:

        【解决方案3】:

        这取决于异常发生的位置!

        如果你的 try catch 结构正确,那就没问题了。

        例如:

        SqlCommand myCommand = new SqlCommand();
        
        try
        {
           myCommand.dostuff();
        }
        catch(Exception ex)
        {
          // display error message
        }
        finally
        {
          myCommand.ExecuteReader(CommandBehavior.CloseConnection);
        }
        

        如果行:myCommand.ExecuteReader(CommandBehavior.CloseConnection) 失败(可能数据库已关闭?),则无法以编程方式关闭连接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-20
          • 1970-01-01
          • 2011-03-22
          • 2013-03-04
          • 2020-03-16
          • 1970-01-01
          • 2012-06-06
          • 2023-03-06
          相关资源
          最近更新 更多