private void ComparaTablas(Objetos.CSysObject obj, Objetos.CSysObject obj2) { //compara los campos de una tabla System.Collections.Generic.List <Objetos.CParametro> l1; System.Collections.Generic.List <Objetos.CParametro> l2; l1 = DB.DameCamposTabla(obj.Nombre); l2 = DB2.DameCamposTabla(obj.Nombre); if (l1.Count != l2.Count) { //son diferentes AgregaDiferencia(obj, "La cantidad de campos no coinciden " + l1.Count + "->" + l2.Count, 2); if (l2.Count > l1.Count) { //faltan campos en la tabla origen, asi que a buscarlos foreach (Objetos.CParametro c2 in l2) { bool encontrado = false; foreach (Objetos.CParametro c1 in l1) { if (c1.nombre.ToLower().Trim() != c2.nombre.ToLower().Trim()) { //que se salte al siguiente campo continue; } encontrado = true; } if (encontrado == false) { AgregaDiferencia(obj, "Falta el campo " + c2.nombre + " en la tabla origen", 1); } } } //return; } int n; n = l2.Count; //comparo campo por campo foreach (Objetos.CParametro c1 in l1) { //primero veo si el campo existe en la otra tabla bool encontrado = false; foreach (Objetos.CParametro c2 in l2) { //comparo los campos if (c1.nombre.ToLower().Trim() != c2.nombre.ToLower().Trim()) { //que se salte al siguiente campo continue; } encontrado = true;//lo marco como encontrado if (c1.tipo != c2.tipo) { //son diferentes AgregaDiferencia(obj, "Los tipos del campo " + c1.nombre.Trim() + " no coinciden " + c1.tipo.Trim() + " " + c2.tipo.Trim(), 2); //return; } if (c1.Logitud != c2.Logitud) { //son diferentes AgregaDiferencia(obj, "La longitud del campo " + c1.nombre.Trim() + " no coincide " + c1.Logitud.ToString() + " " + c2.Logitud.ToString(), 2); //return; } if (c1.NULOS.ToLower().Trim() != c2.NULOS.ToLower().Trim()) { //son diferentes AgregaDiferencia(obj, "La propiedad de aceptar nulos no coinciden " + c1.nombre.Trim() + " " + c1.NULOS.Trim() + " " + c2.NULOS.Trim(), 2); //return; } if (c1.collation != c2.collation) { //son diferentes AgregaDiferencia(obj, "La configuración regional de los campos no coincide " + c1.nombre.Trim() + " " + c1.collation.Trim() + " " + c2.collation.Trim(), 2); } //checo su propiedad de identidad Objetos.CIdentity id1, id2; id1 = DB.DameIdentity(obj.Nombre, c1.nombre); id2 = DB2.DameIdentity(obj.Nombre, c2.nombre); if (id1.EsIdentidad != id2.EsIdentidad) { AgregaDiferencia(obj, "La propiedad identity no coinciden " + id1.EsIdentidad.ToString() + " " + id2.EsIdentidad.ToString() + " campo " + c1.nombre, 2); } else if (id1.EsIdentidad == true) { //si son identidad, ahora chehco sus propiedades if (id1.incremento != id2.incremento) { AgregaDiferencia(obj, "En la propiedad identity no coinciden los imcrementos " + id1.incremento.ToString() + " " + id2.incremento.ToString() + " campo " + c1.nombre, 2); } if (id1.inicio != id2.inicio) { AgregaDiferencia(obj, "En la propiedad identity no coinciden los inicios " + id1.inicio.ToString() + " " + id2.inicio.ToString() + " campo " + c1.nombre, 2); } } //veo si es un campo que tiene valores por default Objetos.CDefault df1, df2; df1 = DB.DameDefault(obj.Nombre, c1.nombre); df2 = DB.DameDefault(obj.Nombre, c2.nombre); if (df1.EsDeafult != df2.EsDeafult) { AgregaDiferencia(obj, "En el campo " + c1.nombre + " la propiedad default no coinciden " + df1.EsDeafult.ToString() + ", " + df2.EsDeafult.ToString(), 2); } else { if (df1.Valor != df1.Valor) { AgregaDiferencia(obj, "En el campo " + c1.nombre + " la propiedad default no coinciden " + df1.Valor + ", " + df2.Valor, 2); } } } if (encontrado == false) { //no se encontro en la tabla AgregaDiferencia(obj, "El campo " + c1.nombre.Trim() + " no existe en la tabla destino ", 1); } } //ahora reviso las claves primarias l1 = DB.DameLLavesPrimarias(obj.Nombre); l2 = DB2.DameLLavesPrimarias(obj2.Nombre); if (l1.Count != l2.Count) { //son diferentes AgregaDiferencia(obj, "No coinciden la cantidad de campos de llaves primarias", 2); return; } }