在这句话中:
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())
{
// ...
}
}
}
}
可以在此代码之外捕获异常。
命令出错的方式有很多。
最终,数据读取器的 Close 方法将关闭连接,前提是之前没有出现任何问题。
如果在 ExecuteReader 或其调用的任何方法内部发生异常,则在构造实际的 DataReader 对象之前,则不会,不会关闭连接。
如果出现异常,我不相信它会关闭连接。
这取决于异常发生在哪里!
如果你正确地构建你的 try catch,那就没问题了。
例如:
SqlCommand myCommand = new SqlCommand();
try
{
myCommand.dostuff();
}
catch(Exception ex)
{
// display error message
}
finally
{
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
如果该行: myCommand.ExecuteReader(CommandBehavior.CloseConnection) 失败(可能数据库已关闭?),则无法以编程方式关闭连接。