.net SqlCommand.ExecuteReader 是不是关闭连接?

Posted

技术标签:

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

在这句话中:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

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

【问题讨论】:

【参考方案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) 失败(可能数据库已关闭?),则无法以编程方式关闭连接。

【讨论】:

以上是关于.net SqlCommand.ExecuteReader 是不是关闭连接?的主要内容,如果未能解决你的问题,请参考以下文章

.NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6

[.NET大牛之路 005] .NET 的执行模型

ADO.NET和.NET的关系?

VS2022 安装.NET 3.5/.NET 4/.NET 4.5/.NET 4.5.1目标包的方法

.net core 3.0和.net5有什么区别

能说一下ADO.NET 和.NET,还有asp.NET的区别吗?