Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!

like image 208
rdumont Avatar asked Apr 02 '26 00:04

rdumont


1 Answers

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...

like image 130
Erich Avatar answered Apr 17 '26 21:04

Erich



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!