SqlDataReader.Read() всегда возвращает false

У меня следующая ситуация:

using (SqlConnection conexao = new SqlConnection(ConnectionString))
{
    SqlCommand comando = new SqlCommand(query, conexao);
    comando.Parameters.AddWithValue("id", idUsuario);
    conexao.Open();
    SqlDataReader reader = comando.ExecuteReader(CommandBehavior.SingleRow);
    if (reader.Read())
    {
        Hydrate(out entity, reader);
    }
}

Так что если reader содержит действительные результаты и HasRows == true, затем reader.Read() должен вернуть истину, верно?

Ну, это не для меня. Я понятия не имею, что происходит, потому что Hydrate(out entity, reader); линия никогда не получит удар.

Может кто-нибудь, пожалуйста, помогите мне понять это?

Спасибо!

1 ответ

Решение

На самом деле, то, что происходит, это то, что SqlDataReader.Read возвращает true, если это НЕ последняя строка.

В вашем поведении указывается "SingleRow", поэтому читатель выравнивает считыватель с первой строкой и возвращает false, говоря "после этой строки не осталось строк".

Смотрите эту ссылку здесь для документации по этому: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

"true, если строк больше; в противном случае - false."

Интересно, однако, что их примеры выглядят так, будто они игнорируют самую последнюю строку, основанную на этом предложении...

Другие вопросы по тегам