private void CopiarDados(MapeamentoTabela tabela, SqlBulkCopy sqlBulkCopy, DbDataReader sqlDataReader, long totalRegistros) { try { sqlBulkCopy.BulkCopyTimeout = 1800 /*30 minutos*/; sqlBulkCopy.BatchSize = TAKE; sqlBulkCopy.NotifyAfter = TAKE; sqlBulkCopy.SqlRowsCopied += (sender, eventArgs) => OnRegistrosMigrados?.Invoke(Math.Min(eventArgs.RowsCopied, totalRegistros)); sqlBulkCopy.DestinationTableName = tabela.Nome; sqlBulkCopy.WriteToServer(sqlDataReader); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Erro de conversão na {tabela} => {ex.Message}"); Console.ResetColor(); } }
private void CopiarDadosComTratamentoDeBlob(MapeamentoTabela tabela, SqlBulkCopy sqlBulkCopy, DbDataReader sqlDataReader, long totalRegistros) { var inserirDados = true; var fieldCount = sqlDataReader.FieldCount; var inseridos = 0L; do { var contador = 0; var datatable = MontarTabelaTemporaria(tabela); while (contador < TAKE && (inserirDados = sqlDataReader.Read())) { var valores = new object[fieldCount]; for (int i = 0; i < fieldCount; i++) { var value = sqlDataReader.GetValue(i); valores[i] = tabela.Colunas[i].Item3 != null ? tabela.Colunas[i].Item3.Converter(value) : value; } datatable.Rows.Add(valores); contador++; } inseridos += TAKE; try { if (contador > 0) { sqlBulkCopy.BulkCopyTimeout = 1800 /*30 minutos*/; sqlBulkCopy.DestinationTableName = tabela.Nome; sqlBulkCopy.WriteToServer(datatable); OnRegistrosMigrados?.Invoke(Math.Min(inseridos, totalRegistros)); } } catch (Exception ex) { OnError?.Invoke(ex.Message); } } while (inserirDados); }