数据读取器在命令中使用语句

时间:2014-09-16 10:51:19

标签: 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. 
     var reader = command.ExecuteReader();
     dataTable.Load(reader);
}
return dataTable;

通常我会将数据读取器包装成一个using语句,所以行将显示为:

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

我认为我会安排时间更新这些方法以包含数据读取器的using语句,但我想知道是否有人知道,在上面的实例中,datareader是否会被处置什么时候处理命令或连接?

1 个答案:

答案 0 :(得分:1)

你必须自己动手,因为命令并没有为你清除DataReader。请参阅示例SqlCommand.Dispose

在这种情况下保存使用using,因为DataTable.Load并未保留对所用DataReader的引用。作为证明,请参阅reference source of DataTable