Beispiel #1
0
        public static DialogResult ShowMessageErro(Exception e)
        {
            DialogResult dlgResult = DialogResult.Abort;
            string msgErro = e.Message;

            if (msgErro.StartsWith("Instrução SQL que seria executada"))
                msgErro.SaveToFile(Controle.Configuracao.Instance.PastaTemporaria + "Comando.sql", false);

            if (e.InnerException != null)
                msgErro += "\n\nExceção interna\n\n" + e.InnerException;

            msgErro += "\n\nStack Trace\n\n" + e.StackTrace;

            #if DEBUG
            ErroBase erro = new ErroBase(msgErro);
            dlgResult = erro.ShowThreadExceptionDialog();

            if (dlgResult == DialogResult.Abort)
                Environment.Exit(0);
            #else
            dlgResult = DialogResult.Ignore;
            FEI.Nucleo.Utils.EnviarEmail(
                "Erro AtualDiaria",
                msgErro,
                Controle.Configuracao.Instance.PastaTemporaria + "Comando.xml" + "," +
                Controle.Configuracao.Instance.PastaTemporaria + "Comando.sql" + "," +
                Controle.Configuracao.Instance.PastaTemporaria + "Comandos.err" + "," +
                Controle.Configuracao.Instance.PastaTemporaria + "Comandos.xml");
            #endif
            return dlgResult;
        }
        private ListaCampo MapeaCampos()
        {
            if (BaseDestino == null)
            {
                erro = new EConexaoIndefinida();
                return null;
            }

            ListaCampo camposDestino = BaseDestino.EsquemaComando("select * from " + TabelaDestino);
            //string cmd = ComandoSQL.Replace("select ", "select top 0 ");
            //ListaCampo camposOrigem = BaseOrigem.EsquemaComando(cmd);
            ListaCampo camposOrigem = BaseOrigem.EsquemaComando(ComandoSQL);

            // Se for Escolha.Auto, só incluira o nome dos campos
            //   se a diferenca de campos entre origem e destino for superior a 50%
            double Percent = (camposOrigem.Count * 100) / camposDestino.Count;
            IncluirNomes = Percent >= 50 ? Escolha.Nao : Escolha.Sim;

            ListaCampo retorno;
            if (IncluirNomes == Escolha.Sim)
            {
                camposDestino.Clear();
                retorno = camposOrigem;
            }
            else
            {
                // Coloca os campos de origem e destino na mesma ordem, par que não seja
                // necessário colocar o nome de cada campo na instrução insert.
                retorno = new ListaCampo();
                foreach (Campo origem in camposOrigem)
                {
                    Campo destino = camposDestino.Find(item => item.Nome.Equals(origem.Nome));
                    if (string.IsNullOrEmpty(destino.Nome))
                        destino = camposDestino.Find(item => item.Nome.Contains(origem.Nome));

                    retorno.Add(destino);
                }

                foreach (Campo destino in camposDestino.Where(x => x.IsAutoIncremento))
                {
                    if (retorno.IndexOf(destino) == -1)
                        retorno.Add(destino);
                }

                retorno.QtdCamposDestino = camposDestino.Count;
            }

            return retorno;
        }