rdumont
rdumont

Reputation: 563

SqlDataReader.Read() always returning false

I have the following situation:

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

So, if reader contains valid results and HasRows == true, then reader.Read() should return true, right?

Well, it doesn't for me. I have no idea of what is going on, because the Hydrate(out entity, reader); line is never getting hit.

Can someone please help me understand this?

Thank you!

Upvotes: 2

Views: 14443

Answers (1)

Erich
Erich

Reputation: 3972

Actually, what happens is SqlDataReader.Read returns true if it is NOT the last row.

Your behavior specifies "SingleRow", so the reader aligns the reader to the first row, and returns false saying "there are no rows left after this one".

See this link Here for the documentation on this: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

"true if there are more rows; otherwise false."

Of interest, however, their examples seem like they would ignore the very last row based on that sentence...

Upvotes: 11

Related Questions