首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET OleDbDataReader

VB.NET OleDbDataReader
EN

Stack Overflow用户
提问于 2012-08-02 01:28:17
回答 3查看 3K关注 0票数 0

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

问题是

是否有一个函数可以获取OleDbDataReader的当前行索引

如何将OleDbDataReader重置为第一行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-02 01:38:56

您不能将读卡器重置到开始位置,因为它是为forward-only reading设计的。

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

  1. 如果要比较的数据集的大小合理,并且在一个字段上进行比较,则可以在键控对象(如通用字典)中缓存来自一个数据库的数据。然后,当您从第二个数据库读取数据时,您可以根据键从字典中获取详细信息,并以这种方式执行比较。
  2. 您可以为一个数据库中的每个记录发出独立的查询,以查看第二个数据库中是否存在匹配,而不是具有嵌套的读取器。
票数 0
EN

Stack Overflow用户

发布于 2012-08-02 01:34:42

根据MSDNOleDbDataReader

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-05-07 02:15:14

我正在解决一个类似的问题,使用DataTable是解决数据阅读器只能前进的问题的最简单的方法。

代码语言:javascript
复制
            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();

卡洛斯·梅里格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11764449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档