Я давно не пользовался DataReaders (я предпочитаю использовать ORM), но я вынужден работать.Я оттягиваю строки и проверяю, что HasRows
верно;отладка на этом этапе и проверка читателя показывает, что мои данные там есть.
Теперь вот проблема: в тот момент, когда я звоню reader.Read()
, попытка расширить результаты говорит: «Перечисление не дало никаких результатов» или что-то еще,и я получаю «Недопустимая попытка чтения, когда нет данных».ошибка.Я получаю то же самое, если не вызываю Read()
(по умолчанию, так как DataReader запускается до первой записи).
Я не могу вспомнить правильный способ справиться с этим;данные там , когда я проверяю HasRows
, но они исчезают в тот момент, когда я пытаюсь прочитать их сразу после или после вызова Read
, что не имеет смысла, как если бы я не звонилRead
, читатель все еще должен быть перед первой записью, и если установлено свойство, которое запускает его с первой записи (SingleRow? Я забыл его имя), то я должен иметь возможность читать строки без вызоваПрочитайте, однако оба пути, кажется, перемещают мимо строки, содержащей данные.
Что я забыл?Код довольно прост:
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
};
}
}