C# 使用语句的命令中的数据读取器

C# 使用语句的命令中的数据读取器,c#,sql,asp.net,C#,Sql,Asp.net,我有一个遗留系统,我注意到其中有以下代码 var dataTable = new DataTable(); using(var connection = new SqlConnection()) using(var command = connection.CreateCommand()) { command.commandType = CommandType.StoredProcedure; //Attach command parameters etc. va

我有一个遗留系统,我注意到其中有以下代码

var dataTable = new DataTable();
using(var connection = new SqlConnection())
using(var command = connection.CreateCommand())
{
     command.commandType = CommandType.StoredProcedure;
     //Attach command parameters etc. 
     var reader = command.ExecuteReader();
     dataTable.Load(reader);
}
return dataTable;
通常情况下,我会将数据读取器包装到using语句中,以便这些行可以读取:

using(var reader = command.ExecuteReader())
{
   dataTable.Load(reader);
}

我想我会安排时间来更新这些方法,以包括数据读取器的using语句,但我想知道是否有人知道,在上面的例子中,当命令或连接被释放时,数据读取器是否会被释放?

您必须自己做,因为该命令不能为您清除
DataReader
。请看一个例子


在这种情况下,使用
using
可以保存,因为
DataTable.Load
不会保留对所用
DataReader
的引用。作为证明,请参阅。

好的-不幸的是,这实际上没有回答OP提出的问题,即当命令/连接被释放时,
DataReader
是否已经被释放。是的。诚然,很难说不处理读者会有什么影响,但无论如何,情况略有不同。