[英]Find the length of an SQL OleDbDataReader
我有一个SQL OleDbDataReader,将访问时的数据带入我的视觉基本前端。 是否可以找到读者持有的记录数? 正如我想使用此值来结束循环。
下面是我的代码。 它的这一部分用于查找数据以运行计算并将该值重新插入到访问中。 我当前正在使用批处理方法,因为我遇到了超时错误,指出立即计算所有数据点以进行计算时,代码花费的时间太长。 下面的代码适用于第一个批处理,但是在第二个批处理中失败,因为它无法查看阅读器中的下一部分数据。 将来,数据在阅读器中的顺序可能不正确,因此一次查看所有阅读器是最好的解决方案。 要解决此问题,我需要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
使用reader.Read()是已记录的用于遍历记录集的方法。 我已经在VBA和ADO中进行了一些编程,其中通过不同的游标类型可以为您提供遍历它们之前的记录总数。 这确实造成了性能上的损失,这是因为我使用的是Excel,并且命令对象必须在读取器启动之前首先将记录集放入内存中。
尽管OleDb是完全可以接受的数据库,但是也许请看ADO执行相同的工作,该工作与SQL 2000-> 2008 R2兼容(从MDAC2.8开始)。 解决此问题的另一种方法是查看是否可以在SQL存储过程中进行处理,然后将其输出到代码中。
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.