我有一个遗留系统,我注意到
中的以下代码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是否会被处置什么时候处理命令或连接?
答案 0 :(得分:1)
你必须自己动手,因为命令并没有为你清除DataReader
。请参阅示例SqlCommand.Dispose
。
在这种情况下保存使用using
,因为DataTable.Load
并未保留对所用DataReader
的引用。作为证明,请参阅reference source of DataTable
。