VB.NET OleDbDataReader

VB.NET OleDbDataReader,vb.net,oledbdatareader,Vb.net,Oledbdatareader,我正在使用OleDbDataReader从Access数据库中读取列,我希望能够使用相同的读取器在相同的函数中再次读取列,因为我在两个数据库之间进行比较,有时数据库中的相同记录顺序不相同,所以我必须在数据库中循环,直到找到指定的记录,然后进行比较 问题是 是否有一个函数可以获取OleDbDataReader的当前行索引 如何将OleDbDataReader重置为第一行?根据OleDbDataReader类 提供一种从数据源读取仅向前的数据行流的方法 这意味着无法返回到前一行。您所能做的就是读取当

我正在使用OleDbDataReader从Access数据库中读取列,我希望能够使用相同的读取器在相同的函数中再次读取列,因为我在两个数据库之间进行比较,有时数据库中的相同记录顺序不相同,所以我必须在数据库中循环,直到找到指定的记录,然后进行比较

问题是

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

如何将
OleDbDataReader
重置为第一行?

根据
OleDbDataReader

提供一种从数据源读取仅向前的数据行流的方法


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

您无法将读卡器重置为开始,因为它是为

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

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

  • 您可以对一个数据库中的每条记录发出独立查询,以查看第二个数据库中是否存在匹配项,而不是使用嵌套的读卡器


  • 我正在解决一个类似的问题,使用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();
    
    DataTable=新的DataTable(“DataTable”);
    for(int colNum=0;colNum

    Carlos A Merighe.

    这是我一直做的事,但是寻找DataGridViews以外的另一个解决方案时,会尝试以下方法并让您知道:)关于大小合理的部分..每个数据库大约有36043条记录..大小合理吗?我认为这取决于您需要存储多少信息以及应用程序将要运行的机器的目标配置文件。例如,如果每条记录是100字节,那么您所说的大约是3MB的数据,这是合理的。但是,如果每条记录为10000字节,则更接近300MB,这在具有8GB内存的专用计算机上可能是合理的,但在具有1GB内存的最终用户计算机上则不太合理。很好,我正在尝试根据使用Microsoft Access对database2所做的更改对database1进行更改。更改包括为特定行添加行、删除行和更改数据,我使用了很多循环,但速度非常慢,所以我可以使用查询来完成此操作吗?它会更快吗?循环的主要问题是行的顺序不同,如果可能的话,我肯定会尝试使用查询而不是循环。一般来说,当面临此类问题时,我会尝试思考如何设计解决方案,以减少应用程序和数据库中执行的代码总量。例如,您可能会发现,在SQL中执行第一级比较的速度与将记录从第二个DB拉入内存然后在内存中进行比较的速度一样快