ADO.NET DataReader是读取整行,还是仅读取“获取”的列?

时间:2008-12-18 01:06:43

标签: ado.net

如果我这样做:

using (SqlCommand cmd = new SqlCommand("SELECT * FROM TBL"))
{
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            string s = reader.GetString(7);
        }
    }
}

Read()调用是将整行读入内存,还是GetString(7)调用意味着读者只读取第7列中的数据?

3 个答案:

答案 0 :(得分:4)

它读取读操作的整行。

答案 1 :(得分:1)

读取操作读取整行。行的大小由select语句决定。所以,如果你有一千列,只想要4,你可以在你的选择中做到这一点。如果另一方面,如果第1列是Y,则需要5列,如果是N,则需要8列,那么运气不好,单个select * from table无法完成。

无法完成的原因是对数据库的调用尽可能快地发送回数据流(结果集),两者之间没有进一步的通信,即使有,也会必须在UNSENT行上,因为当前行已经被发送和接收。要做你正在谈论的事情,就需要在每一列上进行双向沟通,除非在真正特殊的情况下,否则会破坏性能。即使按行进行,通常效率也很低。

答案 2 :(得分:0)

我认为您正在寻找datareader的ExecuteScalar方法,并希望在sql命令中指定列。