我有以下情况:
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);
行永远不会被击中。
有人可以帮我理解这个吗?
谢谢!
答案 0 :(得分:6)
实际上,如果不是最后一行,SqlDataReader.Read会返回true。
您的行为指定“SingleRow”,因此读者将读者与第一行对齐,并返回false,表示“此行之后没有剩余行”。
请参阅此链接以下文档:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx
“如果有更多行,则为true;否则为false。”
然而,有趣的是,他们的例子似乎会忽略基于该句子的最后一行...