0

我正在使用 OleDbDataReader 从 Access 数据库中读取一列,并且我希望能够使用同一个阅读器在同一个函数中再次读取该列,因为我正在对 2 个数据库和有时相同的记录进行比较数据库的顺序不同,所以我必须遍历数据库,直到找到指定的记录然后进行比较。

问题是

是否有获取当前行索引的函数OleDbDataReader

以及如何将其重置OleDbDataReader为第一行?

4

3 回答 3

0

根据MSDNOleDbDataReader该类

提供一种从数据源读取只进数据行流的方法。

这意味着没有办法回到前一行。您所能做的就是阅读当前行或移至下一行。如果您需要能够随机访问任何行,典型的解决方案是将所有行加载到一个列表中,例如 a DataTable,然后处理列表中的行。

于 2012-08-01T17:34:42.297 回答
0

您无法将阅读器重置为开始,因为它是专为只进阅读而设计的。

还有其他几种方法可以解决此类问题:

  1. 如果您比较的数据集大小合理,并且您在一个字段上进行比较,您可以将来自一个数据库的数据缓存在一个键控对象中,例如通用字典。然后,当您从第二个数据库读取数据时,您可以根据键从字典中获取详细信息并以这种方式执行比较。

  2. 您可以为一个数据库中的每条记录发出独立查询,以查看第二个数据库中是否存在匹配项,而不是嵌套读取器。

于 2012-08-01T17:38:56.127 回答
0

我正在解决一个类似的问题,并且使用 DataTable 是解决数据阅读器仅转发问题的最简单方法。

            DataTable table = new DataTable("DataTable");
            for (int colNum = 0; colNum < reader.FieldCount; colNum++)
            {
                DataColumn col = new DataColumn();
                col.ColumnName = reader.GetName(colNum);
                table.Columns.Add(col);
            }//colNum
            while (reader.Read())
            {
                DataRow row = table.NewRow();
                for (int colNum = 0; colNum < reader.FieldCount; colNum++)
                {
                    string columnName = reader.GetName(colNum);
                    row[columnName] = reader.GetValue(colNum);
                }//for
                table.Rows.Add(row);
            }//while
            table.AcceptChanges();

卡洛斯·A·梅里赫。

于 2013-05-06T18:15:14.167 回答