DataReader有行和数据,试图从中读取"没有数据存在"

Way*_*ina 4 c# sqldatareader

我已经很久没有使用DataReaders了(我更喜欢使用ORM)但是我被迫开始工作.我拉回行,检查HasRows是否属实; 此时调试并检查阅读器显示我的数据存在.

现在问题出现了:我打电话的那一刻reader.Read(),试图扩展结果说"枚举没有产生任何结果"或其他什么,我得到"当没有数据存在时无效的读取尝试".错误.如果我不调用Read(),我会得到相同的东西(这是默认情况,因为DataReader在第一个记录之前启动).

我不记得处理这个的正确方法; 当我检查时,数据在那里HasRows,但是在我打电话之后或之后尝试从中读取数据时,数据消失了Read,这没有任何意义,好像我不打电话Read,读者应该仍然在第一个记录之前,并且如果设置的属性设置为在第一个记录(SingleRow?我忘记了它的名称)处启动它,那么我应该能够在不调用Read的情况下读取行,但是两种方式似乎都移包含数据的行.

我忘记了什么?代码相当简单:

TemplateFile file = null;
using (DbDataReader reader = ExecuteDataReaderProc("GetTemplateByID", idParam)) 
{ 
    if (reader.HasRows) // reader has data at this point - verified with debugger
    { 
        reader.Read(); // loses data at this point if I call Read()
        template = new TemplateFile 
        {
            FileName = Convert.ToString(reader["FileName"]) // whether or not I call
                                                            // Read, says no data here
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

Way*_*ina 10

只是为了澄清答案,它使用调试器,因为扩展结果视图调用Read(),因此它移过该行.正如Marc Gravell在评论中所说:调试器认为有害