public void RealizarImportacao(string pCaminhoDoArquivoDeDados)
        {
            gImportacoesParaRealizar = new List <ResultadoDeImportacao>();

            ResultadoDeImportacao lResultado;

            if (pCaminhoDoArquivoDeDados.EndsWith("\\"))
            {
                string[] lCaminhos = Directory.GetFiles(pCaminhoDoArquivoDeDados);

                foreach (string lCaminho in lCaminhos)
                {
                    if (!lCaminho.EndsWith(".importado"))       //arquivos ".importado" são os que já foram importados
                    {
                        lResultado = new ResultadoDeImportacao(lCaminho);

                        gImportacoesParaRealizar.Add(lResultado);
                    }
                }
            }
            else
            {
                gImportacoesParaRealizar.Add(new ResultadoDeImportacao(pCaminhoDoArquivoDeDados));
            }

            OnMensagem("[{0}] arquivo{1} para importar.", gImportacoesParaRealizar.Count, gImportacoesParaRealizar.Count > 0 ? "s" : "");

            ThreadStart lThread = new ThreadStart(RealizarImportacoes);

            lThread.BeginInvoke(null, null);

            OnMensagem("Thread de importações iniciado.");
        }
        private void RealizarImportacao(ResultadoDeImportacao pResultado)
        {
            //System.Threading.Thread.Sleep(4000);

            string lArquivoRelativo = Path.GetFileName(pResultado.CaminhoDoArquivoDeDados);

            Importacao_AbrirArquivoDeLog(lArquivoRelativo);

            Importacao_AbrirArquivoDeSaida(lArquivoRelativo);

            if (Importacao_AbrirConexaoComBanco())
            {
                ExecutarProcedureCasoHaja(this.ProcAnterior, "pré-importação");

                int lContagemSucessos = 0;
                int lContagemErros    = 0;
                int lTotal            = gLinhasDoArquivosDeDados.Length;

                byte lPassosParaLogar = 0;

                byte lMaximoDeErrosEmSequencia = 100;

                bool lImportacaoComSucesso = true;

                for (int a = 0; a < gLinhasDoArquivosDeDados.Length; a++)
                {
                    lPassosParaLogar++;

                    if (lPassosParaLogar == 10)
                    {
                        lPassosParaLogar = 0;

                        OnMensagem("Importação em andamento: [{0}] com sucesso, [{1}] com erro.", lContagemSucessos, lContagemErros);
                    }


                    try
                    {
                        if (string.IsNullOrEmpty(this.ProcDeDestino))
                        {
                            Importacao_ProcessarLinhaViaInsert(gLinhasDoArquivosDeDados[a]);
                        }
                        else
                        {
                            Importacao_ProcessarLinhaViaProcedure(gLinhasDoArquivosDeDados[a]);
                        }

                        lContagemSucessos++;
                    }
                    catch (Exception ex)
                    {
                        OnMensagem("Erro ao importar a linha número [{0}]: [{1}]", (a + 1).ToString().PadLeft(9, '0'), ex.Message);

                        lContagemErros++;
                    }


                    if (lContagemErros >= lMaximoDeErrosEmSequencia && lContagemSucessos == 0)
                    {
                        OnMensagem("Passaram-se [{0}] erros sem nenhum sucesso, a importação será abortada.", lContagemErros);

                        lImportacaoComSucesso = false;

                        break;
                    }
                }

                ExecutarProcedureCasoHaja(this.ProcPosterior, "posterior");

                if (lImportacaoComSucesso)
                {
                    ExecutarProcedureCasoHaja(this.ProcCasoSucesso, "de sucesso");

                    OnMensagem("Importação realizada com sucesso, renomeando arquivo de dados");

                    File.Move(pResultado.CaminhoDoArquivoDeDados, pResultado.CaminhoDoArquivoDeDados + ".importado");

                    pResultado.MarcarComoFinalizada("Finalizada com Sucesso");
                }
                else
                {
                    ExecutarProcedureCasoHaja(this.ProcCasoErro, "de erro");

                    OnMensagem("Importação realizada com erro.");

                    pResultado.MarcarComoFinalizada("Finalizada com Erro");
                }
            }
            else
            {
                OnMensagem("Importação abortada por falta de conexão com o banco de dados.");

                pResultado.MarcarComoFinalizada("Finalizada com Erro");
            }

            Importacao_FecharArquivosEConexao();
        }