HTH Харви Сатер
использовал 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
};
}
}