SqlDataReader.Read()总是返回false

时间:2009-10-08 21:29:10

标签: .net sqldatareader

我有以下情况:

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()应该返回true,对吗?

嗯,这不适合我。我不知道发生了什么,因为Hydrate(out entity, reader);行永远不会被击中。

有人可以帮我理解这个吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

实际上,如果不是最后一行,SqlDataReader.Read会返回true。

您的行为指定“SingleRow”,因此读者将读者与第一行对齐,并返回false,表示“此行之后没有剩余行”。

请参阅此链接以下文档:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

“如果有更多行,则为true;否则为false。”

然而,有趣的是,他们的例子似乎会忽略基于该句子的最后一行...