internal static IEnumerable<object[]> FetchRecordsFromReader(OracleDataReader reader, int rowCount, bool prefetch) { if (!CanFetchFromReader(reader)) { yield break; } var fieldTypes = new string[reader.FieldCount]; var internalTypes = reader.GetInternalDataTypes(); for (var i = 0; i < reader.FieldCount; i++) { var fieldType = reader.GetDataTypeName(i); fieldTypes[i] = internalTypes[i] == OracleRowId.InternalCode ? OracleRowId.TypeName : fieldType; } for (var i = 0; i < rowCount; i++) { if (!CanFetchFromReader(reader)) { yield break; } object[] values; try { if (reader.Read()) { values = BuildValueArray(reader, fieldTypes, prefetch); } else { reader.Close(); yield break; } } catch { if (!reader.IsClosed) { reader.Close(); } throw; } yield return values; } }