如何使用C#中的数据读取器遍历行?

时间:2011-12-03 20:53:15

标签: c# asp.net datatable

我知道我可以使用while(dr.Read()){...}但是循环我桌子上的每个字段,我想要检索第一行中的所有值,然后是第二行...依此类推。

假设我有一张这样的表:

ID--------------Value1--------------Value2------------------Value3
1               hello               hello2                  hello3
2               hi1                  hi2                      hi3

首先我想获得,hellohello2hello3,然后转到第二行并获取所有值。

有没有办法实现这个目标?我希望有人理解我的意思。

我很抱歉,现在已经解决了。我只是编码不对......

是的,SqlDataReader.Read()方法做了它应该做的事情,错误再次是我的。

8 个答案:

答案 0 :(得分:67)

这就是DataReader的工作方式,它旨在一次读取一个数据库行。

while(reader.Read()) 
{
  var value1 = reader.GetValue(0); // On first iteration will be hello
  var value2 = reader.GetValue(1); // On first iteration will be hello2
  var value3 = reader.GetValue(2); // On first iteration will be hello3
}

答案 1 :(得分:29)

int count = reader.FieldCount;
while(reader.Read()) {
    for(int i = 0 ; i < count ; i++) {
        Console.WriteLine(reader.GetValue(i));
    }
}

请注意;如果你有多个网格,那么:

do {
    int count = reader.FieldCount;
    while(reader.Read()) {
        for(int i = 0 ; i < count ; i++) {
            Console.WriteLine(reader.GetValue(i));
        }
    }
} while (reader.NextResult())

答案 2 :(得分:18)

或者您可以尝试直接按名称访问列:

while(dr.Read())
{
    string col1 = (string)dr["Value1"];
    string col2 = (string)dr["Value2"];
    string col3 = (string)dr["Value3"];
}

答案 3 :(得分:6)

无法立即获得“整行” - 您需要循环遍历行,并且对于每一行,您需要分别读取每一列:

using(SqlDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        string value1 = rdr.GetString(0);
        string value2 = rdr.GetString(1);
        string value3 = rdr.GetString(2);
    }
}

您对每行读取的字符串的处理完全取决于您 - 您可以将它们存储到您定义的类中,或者其他任何内容....

答案 4 :(得分:3)

  

如何使用C#中的数据读取器遍历行?

IDataReader.Read()使读者前进到结果集中的下一行。

while(reader.Read()){
    /* do whatever you'd like to do for each row. */
}

因此,对于循环的每次迭代,您将执行另一个循环,0到reader.FieldCount,并为每个字段调用reader.GetValue(i)

更大的问题是你想用什么样的结构来保存这些数据?

答案 5 :(得分:1)

实际上Read方法迭代结果集中的记录。在你的情况下 - 在表行。所以你仍然可以使用它。

答案 6 :(得分:0)

while (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        subjob.Items.Add(dr[i]);
    }
}

读取一列中的行

答案 7 :(得分:-1)

假设您的DataTable具有以下列,请尝试以下代码:

DataTable dt =new DataTable();
txtTGrossWt.Text = dt.Compute("sum(fldGrossWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldGrossWeight)", "").ToString();
txtTOtherWt.Text = dt.Compute("sum(fldOtherWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldOtherWeight)", "").ToString();
txtTNetWt.Text = dt.Compute("sum(fldNetWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldNetWeight)", "").ToString();
txtFinalValue.Text = dt.Compute("sum(fldValue)", "").ToString() == "" ? "0" : dt.Compute("sum(fldValue)", "").ToString();