DataReader tem linhas e dados, tentando ler a partir dele diz "não há dados presentes"
Não uso DataReaders há anos (prefiro usar um ORM), mas sou forçado a trabalhar. Afasto as linhas e verifico seHasRows
é verdade; a depuração neste momento e o exame do leitor mostram que meus dados estão lá.
Agora, aqui está a questão: no momento em que ligoreader.Read()
, tentando expandir os resultados, diz "A enumeração não produziu resultados" ou o que for, e recebo a "Tentativa inválida de ler quando nenhum dado está presente". erro. Recebo o mesmo se não ligar paraRead()
(que é o padrão desde que o DataReader inicia antes do primeiro registro
Não consigo me lembrar da maneira correta de lidar com isso; os dados quando eu verificoHasRows
, mas desapareceu no momento em que tento ler o livro logo depois ou depois de ligar paraRead
, o que não faz sentido como se eu não chamasseRead
, o leitor ainda deve estar antes do primeiro registro e, se a propriedade estiver configurada para iniciá-lo no primeiro registro (SingleRow? Esqueci o nome dele) estiver configurada, será possível ler as linhas sem chamar Read, no entanto, os dois lados parecem se moverpassad a linha que contém os dado
O que estou esquecendo? O código é bastante direto:
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
};
}
}