2009-10-08 121 views
1

我有以下情況:SqlDataReader.Read()總是返回false

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);系列從未受到影響。

有人能幫我理解嗎?

謝謝!

回答

6

實際上,如果它不是最後一行,SqlDataReader.Read會返回true。

您的行爲指定了「SingleRow」,因此讀者將閱讀器對齊到第一行,並返回false,表示「此行之後沒有剩餘行」。

請參閱此鏈接這裏的文檔在此:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx

「真,如果有更多的行;否則爲false。」

然而,他們的例子似乎會忽略基於該句子的最後一行......