在这句话中:
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
是否在异常的情况下关闭连接?
答案 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)失败(可能数据库已关闭?)则无法以编程方式关闭连接。