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 == truereader.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 に答える