4

在这句话中:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

如果出现异常,它会关闭连接吗?

4

3 回答 3

7

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

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

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

于 2008-10-21T07:26:23.833 回答
3

命令出错的方式有很多。

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

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

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

于 2008-10-21T07:14:00.723 回答
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) 失败(可能数据库已关闭?),则无法以编程方式关闭连接。

于 2008-10-21T07:14:44.373 回答