protected virtual int ImportaMidia(ListaCampo campos)
        {
            //Execução individual dos comandos

            string cmd = "";
            string cmdWhere = "";
            string nomeMidia = "";
            string campoDestino = "";
            string senha = dataTable.Rows[0]["Senha"].ToString();
            string usuario = dataTable.Rows[0]["Usuario"].ToString();
            string dominio = dataTable.Rows[0]["Dominio"].ToString();
            string caminhoRede = dataTable.Rows[0]["Caminho"].ToString().RemoveUltimoChar('\\');

            int registrosAfetados = 0;
            NetworkCredential credenciais = new NetworkCredential(usuario, senha, dominio);
            using (new NetworkConnection(caminhoRede, credenciais))
            {
                DoRotinaInicializa(dataTable.Rows.Count);

                List<String> chaves;
                if (string.IsNullOrEmpty(camposChaves))
                    chaves = campos.CamposChaves;
                else chaves = new List<string>(camposChaves.ToLower().Split(';'));

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    DataRow linha = dataTable.Rows[i];
                    nomeMidia = linha["NomeMidia"].ToString();
                    campoDestino = linha["CampoDestino"].ToString();

                    string arquivo = caminhoRede + "\\" + nomeMidia;
                    if (File.Exists(arquivo))
                    {
                        foreach (string chave in chaves)
                        {
                            Campo campo = campos[chave];
                            cmdWhere = campo.Nome + "=" + campo.RotinaConversao(linha[chave]) + " and ";
                        }
                        cmdWhere = cmdWhere.Trim().Length == 0 ? "" : " where " + cmdWhere.Remove(cmdWhere.Length - 5);
                        cmd = string.Format("update {0} set {1} = @midia {2};", TabelaDestino, campoDestino, cmdWhere);

                        ExecutaMigracao(cmd, arquivo);
                        registrosAfetados++;
                        DoRotinaProgresso(i);
                    }
                }
                DoRotinaFinaliza();
            }

            return registrosAfetados;
        }
Esempio n. 2
0
        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;
        }