1

我有以下情况:

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);条线永远不会被击中。

有人可以帮我理解吗?

谢谢!

4

1 回答 1

7

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

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

有关此文档,请参见此处的链接:http: //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

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

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

于 2009-10-08T21:31:48.820 回答