找到SQL OleDbDataReader的长度

时间:2012-09-13 09:05:51

标签: sql vb.net visual-studio oledb jet

我有一个SQL OleDbDataReader将数据从access访问到我的visual basic前端。是否有可能找到读者持有的记录数量?因为我想用这个值来结束一个循环。

以下是我的代码。这部分用于查找数据以运行计算并将值重新插入访问。我目前正在使用批处理方法,因为我有时间错误,说明在计算一次计算的所有数据点时代码花费的时间太长。下面的代码适用于第一批,但在第二批代码中失败,因为它无法查看阅读器中的下一部分数据。未来读卡器内的数据可能不正确,因此一次查看所有读卡器是最佳解决方案。要解决此问题,我需要制作Do Until SearchCounter = the length of the reader。 我尝试将阅读器的内容放入数组中以查找其长度,但这非常耗时。任何其他建议都会非常受欢迎。

For CalcParameterCounter = 0 To CalcParams.GetLength(0) - 1

                ParamQuery = "ID_PAR = " & Format(CalcParams(CalcParameterCounter), "0")
                conditions = ParamQuery ' & UploadQuery

                DatabaseConnection("SELECT " & FieldNames & " FROM " & tablename & " WHERE " & conditions, "Read Recordset"

                CalcDataRecordPointer = 0
                Do Until rdrOLEDB.Read = False
                    SearchCounter = 0
                    Do Until SearchCounter = CalcData.GetLength(1)
                        CalcDataRecordPointer = CalcDataRecordPointer + 1
                        If CalcDataRecordPointer = CalcData.GetLength(1) Then CalcDataRecordPointer = 0
                        Value = rdrOLEDB.Item(1)
                        If CDate(rdrOLEDB.Item(0).ToString()) = CDate(CalcData(0, CalcDataRecordPointer)) Then
                            match = True
                            CalcData(CalcParameterCounter + 1, CalcDataRecordPointer) = rdrOLEDB.Item(1).ToString()
                            Exit Do
                        Else
                            match = False
                        End If
                        SearchCounter = SearchCounter + 1
                    Loop
                Loop
                'Close:
                rdrOLEDB.Close()
                cnnOLEDB.Close()
            Next

1 个答案:

答案 0 :(得分:0)

使用reader.Read()是循环记录集的文档化方法。我已经在VBA和ADO中完成了一些编程,其中通过不同的游标类型将在循环之前为您提供总记录数。这确实造成了性能损失,即因为我使用的是Excel,以及命令对象必须在读取器启动之前将记录集放入内存中这一事实。

尽管OleDb是完全可以接受的数据库,但也许可以看看ADO执行相同的工作,这是兼容的(从MDAC2.8开始)SQL 2000 - > 2008 R2。查看此问题的另一种方法是查看是否可以在SQL存储过程中执行处理,然后将其输出到您的代码。

祝你好运。