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."
Интересно, однако, что их примеры выглядят так, будто они игнорируют самую последнюю строку, основанную на этом предложении...