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

Posted

技术标签:

【中文标题】如何在 C# 中使用数据读取器遍历行?【英文标题】:How do I loop through rows with a data reader in C#? 【发布时间】:2012-01-12 08:15:36 【问题描述】:

我知道我可以使用while(dr.Read())...,但这会循环我表上的每个字段,我想从第一行检索所有值,然后是第二行……等等。

假设我有一张这样的桌子:

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

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

有没有办法做到这一点?我希望有人明白我的意思。

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

是的,SqlDataReader.Read() 方法完成了它应该做的事情,这又是我的错误。

【问题讨论】:

我不明白你的意思。 DataReader 已经一次返回一行,并且您可以按任何顺序访问每一列,如果您想要的话,可能从第一列到最后一列。您能否更新您的问题以提供一些具体代码、预期输出以及您实际获得的输出? 【参考方案1】:

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

【讨论】:

【参考方案2】:
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())

【讨论】:

我了解如何使用 Console.Writeline(reader.GetValue(I)); 遍历阅读器并获取所有值这很好用,我需要将它添加到数组中怎么办我得到 Mystringarray[I] = reader.GetValue(I) 它只添加数组的第一个索引 0 而不会继续将它添加到另一个【参考方案3】:

这就是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

【讨论】:

【参考方案4】:

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

IDataReader.@987654321@ 将阅读器推进到结果集中的下一行。

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

因此,对于循环的每次迭代,您将执行另一个循环,从 0 到 reader.@987654322@,并为每个字段调用 reader.@987654323@

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

【讨论】:

【参考方案5】:

没有办法一次得到“整行”——你需要遍历行,对于每一行,你需要分别读取每一列:

using(SqlDataReader rdr = cmd.ExecuteReader())

    while (rdr.Read())
    
        string value1 = rdr.GetString(0);
        string value2 = rdr.GetString(1);
        string value3 = rdr.GetString(2);
    

你对每一行读取的字符串做什么完全取决于你——你可以将它们存储到你定义的类中,或者其他什么......

【讨论】:

【参考方案6】:

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

while(dr.Read())

    string col1 = (string)dr["Value1"];
    string col2 = (string)dr["Value2"];
    string col3 = (string)dr["Value3"];

【讨论】:

【参考方案7】:

假设你的 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();

【讨论】:

【参考方案8】:
while (dr.Read())

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

在一列中读取行

【讨论】:

以上是关于如何在 C# 中使用数据读取器遍历行?的主要内容,如果未能解决你的问题,请参考以下文章

C# 文件流 streamreader如何读取文本指定行的数据?

在 C# 中读取 BerkeleyDB 数据库行

C#中gridview已经读取了Excel的数据,但是在主界面上未显示出来

c#使用for循环逐行读取excel数据很慢

C# 中如何将SQL数据库中读取到的 一整行数据 存到数组,最好是list中,请写详细答案

如何在 C# 中读取另一个进程的命令行参数?