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

本文关键字:语句 数据 读取 命令 | 更新日期: 2023-09-27 18:21:58

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

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。请参见示例SqlCommand.Dispose

在这种情况下使用using是节省的,因为DataTable.Load不保留对所使用的DataReader的引用。作为证据,请参阅DataTable的参考来源。