我熟悉使用.Read()来检测EOF
        using (IDataReader reader = SqlHelper.ExecuteReader(_connectionString, "dbo.GetOrders"))
        {
            AssertOrder(reader);
            while (reader.Read())
            {
                yield return FillRecord<Order>(reader, StringComparer.OrdinalIgnoreCase);
            }
            reader.Close();
        }
由于我遇到了一些奇怪的情况,FillRecord实际上推动了读者.所以现在while循环中的.Read()实际上会导致这个函数跳过一些行 - 因为我们正在前进两次.
我希望有一个IDataReader.EOF,但没有.有什么想法吗?
我想我可能在评论中明确表达了我的意见......但是,既然你要求“任何想法”......就在这里:
显然这是一个两秒钟的黑客工作,但你会明白的:
(你肯定想要实现 IDisposable (因为我认为 IDataReader 是??)等。可能只是让该类继承 IDataReader,并将该类实现为外观。或者变得真正酷并实现一个透明代理来劫持 Read方法。
public class DataReaderWithEOF
{
     public bool EOF { public get; private set; }
     private IDataReader reader;
     public DataReaderWithEOF(IDataReader reader)
     {
          this.reader = reader;
     }
     public bool Read()
     {
           bool result = reader.Read();
           this.EOF = !result;
           return result;
     }
}
| 归档时间: | 
 | 
| 查看次数: | 8498 次 | 
| 最近记录: |