private async Task <int> FillLoadDataRowChunkAsync(SchemaMapping mapping, int startRecord, int maxRecords) { DataReaderContainer dataReader = mapping.DataReader; while (0 < startRecord) { if (!await dataReader.ReadAsync()) { // there are no more rows on first resultset return(0); } --startRecord; } int rowsAddedToDataSet = 0; if (0 < maxRecords) { while ((rowsAddedToDataSet < maxRecords) && await dataReader.ReadAsync()) { if (_hasFillErrorHandler) { try { await mapping.LoadDataRowWithClear(); rowsAddedToDataSet++; } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ADP.TraceExceptionForCapture(e); OnFillErrorHandler(e, mapping.DataTable, mapping.DataValues); } } else { await mapping.LoadDataRow(); rowsAddedToDataSet++; } } // skip remaining rows of the first resultset } else { rowsAddedToDataSet = await FillLoadDataRowAsync(mapping); } return(rowsAddedToDataSet); }
private async Task <int> FillLoadDataRowAsync(SchemaMapping mapping) { int rowsAddedToDataSet = 0; DataReaderContainer dataReader = mapping.DataReader; if (_hasFillErrorHandler) { while (await dataReader.ReadAsync()) { // read remaining rows of first and subsequent resultsets try { // only try-catch if a FillErrorEventHandler is registered so that // in the default case we get the full callstack from users await mapping.LoadDataRowWithClear(); rowsAddedToDataSet++; } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ADP.TraceExceptionForCapture(e); OnFillErrorHandler(e, mapping.DataTable, mapping.DataValues); } } } else { while (await dataReader.ReadAsync()) { // read remaining rows of first and subsequent resultset await mapping.LoadDataRow(); rowsAddedToDataSet++; } } return(rowsAddedToDataSet); }