2009-10-08 4 views
1

я следующая ситуация:SqlDataReader.Read() всегда возвращаются ложные

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); никогда не попадает.

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

Спасибо!

ответ

6

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

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

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

«истинная, если есть несколько строк, в противном случае лжи.»

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

Смежные вопросы