alw*_*ing 6 c# ado.net dispose dbdatareader
我有一个简单的应用程序,需要执行某些查询来获取数据库架构信息.我写了一个简单的方法来执行查询并返回一个读者,像这样 -
public static DbDataReader ExecuteQuery(DbConnection connection,string sql)
{
DbCommand command = connection.CreateCommand();
command.CommandText = sql;
using(command)
{
return command.ExecuteReader();
}
}
Run Code Online (Sandbox Code Playgroud)
调用代码确实关闭连接并适当地处理读取器和连接.
我的问题 - 在迭代读取器之前,是否可以将命令实例(通过使用块完成)放弃?关闭阅读器后,我不希望填充任何OUT参数.ADO.NET API是否有任何严格的准则?
当您将 using 块留在方法命令中时,命令将关闭并释放,如果您能够使用调用者的读取器,则意味着它仍然可以工作。
命令是针对连接执行语句的一种方法,但不保存任何数据,这就是它起作用的原因。只要连接打开,您就可以使用您的阅读器。
附言。还有一个很好的 ExecuteReader 重载,它指示 Reader 直接为您关闭连接,当连接像使用命令一样在本地创建而不是从外部传递时,这很有用。