示例#1
0
 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();
     }
 }
示例#2
0
        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);
        }