.net SqlCommand.ExecuteReader 是不是关闭连接?
Posted
技术标签:
【中文标题】.net SqlCommand.ExecuteReader 是不是关闭连接?【英文标题】:Does .net SqlCommand.ExecuteReader close connection?.net SqlCommand.ExecuteReader 是否关闭连接? 【发布时间】:2008-10-21 07:07:58 【问题描述】:在这句话中:
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
出现异常时是否关闭连接?
【问题讨论】:
【参考方案1】:进行“正常”查询的最安全方法是
using (var conn = new SqlConnection("..."))
conn.Open();
using (var cmd = conn.CreateCommand())
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
while (reader.Read())
// ...
可以在此代码之外捕获异常。
【讨论】:
【参考方案2】:命令出错的方式有很多。
如果之前没有出现任何问题,最终将由数据读取器的 Close 方法关闭连接。
如果在 ExecuteReader 或其调用的任何方法内部发生异常,在构造实际的 DataReader 对象之前,则不会,连接不会关闭。
如果出现异常,我不相信它会关闭连接。
【讨论】:
【参考方案3】:这取决于异常发生的位置!
如果你的 try catch 结构正确,那就没问题了。
例如:
SqlCommand myCommand = new SqlCommand();
try
myCommand.dostuff();
catch(Exception ex)
// display error message
finally
myCommand.ExecuteReader(CommandBehavior.CloseConnection);
如果行:myCommand.ExecuteReader(CommandBehavior.CloseConnection) 失败(可能数据库已关闭?),则无法以编程方式关闭连接。
【讨论】:
以上是关于.net SqlCommand.ExecuteReader 是不是关闭连接?的主要内容,如果未能解决你的问题,请参考以下文章
.NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6