.net SqlCommand.ExecuteReader关闭连接吗?
问题描述:
在这个句子:.net SqlCommand.ExecuteReader关闭连接吗?
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
确实异常的情况下,它紧密结合?
答
命令可能出错的方式很多。
最终,数据读取器的Close方法会关闭连接,前提是没有出错。
如果在构造实际的DataReader对象之前发生了ExecuteReader或其任何调用方法内部的异常,则no,连接将不会关闭。
如果发生异常,我不会信任它来关闭连接。
答
这取决于发生异常的地方!
如果你正确地构建你的try catch,它会没事的。
例如:
SqlCommand myCommand = new SqlCommand();
try
{
myCommand.dostuff();
}
catch(Exception ex)
{
// display error message
}
finally
{
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
如果行:myCommand.ExecuteReader(CommandBehavior.CloseConnection)失败(?也许是数据库已经下降),那么连接不能以编程方式关闭。
答
做一个“正常”的查询最安全的方式是
using (var conn = new SqlConnection("..."))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
例外可以将此代码之外被抓住。