c#-检查是否已在SqlDataReader上调用read()

提问

我正在编写一些使用SqlDataReader并处理结果的辅助函数.现在,通常可以像下面这样构造循环:

while(reader.read()){
    // Read fields
}

但是我要向该函数传递已经位于行上的阅读器,在这种情况下,我希望它处理当前行.如果在调用函数之前未调用read(),则上面的代码将仅输出整个结果集.

我希望函数执行以下操作:

if(!reader._dataReady)
    rowExists = reader.read() // Read 
while(rowExists){
    // read fields
    rowExists = reader.read()
}

_dataReady是SqlDataReader的实际成员,似乎可以满足我的要求,但是它是私有的!当然,有一种方法可以确定读取器是否位于实际的行上,而无需尝试读取该字段并捕获异常.

最佳答案

为什么不只是继承SqlDataReader,并创建Read()方法?现在,我在所有项目中都拥有它:

public class SafeDataReader : IDataReader, SqlDataReader
{
    public IDataReader reader {get;set;}
    public int GetInt32(string aFieldName, int aDefault);
    public int? GetInt32Nullable(string aFieldName);
    .... 
}