关于DataReader使用的问题
using (IDataReader reader = ExecuteReader(cmd)) {
int index = 0;
while (reader.Read()) {
if (index >= region.Start) {
item = new T();
item.LoadData(reader);
items.Add(item);
if (items.Count == region.Size)
{
break;
}
}
index++;
}
}
以上代码看上去似乎没什么问题,事实存在的问题是比较严重的。按道理break后紧接就是reader的关闭和释放,但在SqlDataReader确是把所有记录都read以后才会关闭和释放。正确的做法应该在break前调用Command.Cancel()方法取消继续执行。