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; }
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; }