2009-10-08 5 views
1

Je la situation suivante:SqlDataReader.Read() retournant toujours faux

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); 
    } 
} 

Donc, si reader contient des résultats valides et HasRows == true, alors reader.Read() devrait retourner vrai, non?

Eh bien, ce n'est pas pour moi. Je n'ai aucune idée de ce qui se passe, car la ligne Hydrate(out entity, reader); ne sera jamais touchée.

Est-ce que quelqu'un peut m'aider à comprendre cela?

Merci!

Répondre

6

En fait, ce qui se passe est SqlDataReader.Read retourne vrai si ce n'est pas la dernière ligne.

Votre comportement indique "SingleRow", de sorte que le lecteur aligne le lecteur sur la première ligne et renvoie false en disant "il n'y a plus de ligne après celle-ci".

Voir ce lien ici pour la documentation sur ce point: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

« vrai s'il y a plus de lignes, sinon faux. » Cependant, il semblerait que leurs exemples semblent ignorer la toute dernière rangée basée sur cette phrase ...