private void BulkCopy(string schemaName, string tableName, TableColumnInfo[] columns, IDataReader reader) { try { long sizeCounter = 0, rowIndex = 0; var secondValues = reader.GetMatrixInstance(BatchSize); while (reader.Read()) { reader.GetValues(secondValues[sizeCounter]); sizeCounter++; if (NotifyAfter > 0 && (rowIndex % NotifyAfter == 0 && rowIndex > 0)) { RowsCopied?.Invoke(this, new RowsCopiedEventArgs(rowIndex)); } if (sizeCounter == BatchSize) { _db.BulkCopy(schemaName, tableName, columns, secondValues, BatchSize); sizeCounter = 0; secondValues = reader.GetMatrixInstance(BatchSize); } rowIndex++; } var lastValues = new object[sizeCounter][]; for (var lastIndex = 0; lastIndex < sizeCounter; lastIndex++) lastValues[lastIndex] = secondValues[lastIndex]; _db.BulkCopy(schemaName, tableName, columns, lastValues, BatchSize); RowsCopied?.Invoke(this, new RowsCopiedEventArgs(rowIndex)); } catch (Exception exception) { LoggerHelper.Write(LoggerOption.Error, exception.Message); RowsCopied?.Invoke(this, new RowsCopiedEventArgs { Abort = true }); } }
internal void OnRowsCopied(long rows) { RowsCopied?.Invoke(rows); }