Visual Basic 프론트 엔드로 데이터를 가져 오는 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
SQL Server는 일반적으로 읽지 않을 때까지 마지막 행의 내용을 알지 못합니다. 로우 카운트를 아는 것이 중요하다면, 쿼리에'count()'를 추가 할 수 있습니다. 새 쿼리가 미리 전송되거나 실제 쿼리의 일부로 전송됩니다. 이것은 성능 비용과 함께 제공됩니다. – Andomar