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

时间:2008-10-21 07:07:58

标签: .net sqlconnection sqlcommand

在这句话中:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

是否在异常的情况下关闭连接?

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

有很多方法可以解决命令。

最终,数据阅读器的Close方法将关闭连接,前提是没有出错。

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

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

答案 2 :(得分:0)

这取决于发生异常的地方!

如果您正确构建了try catch,那就没问题了。

例如:

SqlCommand myCommand = new SqlCommand();

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

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