如何使用C#中的数据读取器循环遍历行
本文关键字:循环 遍历 读取 数据 何使用 | 更新日期: 2023-09-27 18:16:38
我知道我可以使用while(dr.Read()){...}
,但这会循环我表上的每个字段,我想从第一行检索所有值,然后从第二行检索。。。等等
假设我有一张这样的桌子:
ID--------------Value1--------------Value2------------------Value3
1 hello hello2 hello3
2 hi1 hi2 hi3
首先我想得到hello
、hello2
和hello3
,然后转到第二行,得到所有的值。
有办法做到这一点吗?我希望有人能理解我的意思。
我很抱歉,现在已经解决了。我只是编码不对
是的,SqlDataReader.Read((方法做了它应该做的事情,同样错误是我的
这就是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
}
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())
或者您可以尝试直接通过名称访问列:
while(dr.Read())
{
string col1 = (string)dr["Value1"];
string col2 = (string)dr["Value2"];
string col3 = (string)dr["Value3"];
}
没有办法一次获得"整行"-您需要遍历行,对于每一行,您需要分别读取每一列:
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
string value1 = rdr.GetString(0);
string value2 = rdr.GetString(1);
string value3 = rdr.GetString(2);
}
}
你对每行读取的字符串做什么完全取决于你自己——你可以将它们存储到你定义的类中,或者其他什么。。。。
如何使用C#中的数据读取器循环遍历行?
IDataReader.Read()
使读取器前进到结果集中的下一行。
while(reader.Read()){
/* do whatever you'd like to do for each row. */
}
因此,对于循环的每次迭代,您都要执行另一个循环,从0到reader.FieldCount
,并为每个字段调用reader.GetValue(i)
。
更大的问题是,你想用什么样的结构来保存这些数据?
实际上是Read
方法在结果集中的记录上迭代。在您的情况下,在表行之上。所以你仍然可以使用它。
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
subjob.Items.Add(dr[i]);
}
}
读取一列中的行
假设您的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();