Foros del Web » Programando para Internet » ASPX (.net) »

[SOLUCIONADO] Comparar tabla .xls con tabla en base de datos

Estas en el tema de Comparar tabla .xls con tabla en base de datos en el foro de ASPX (.net) en Foros del Web. Hola, Estoy intentando comparar la información de un .xls con la información que tengo en una Base de datos. Para colmo de dificultad, estoy trabajando ...
  #1 (permalink)  
Antiguo 09/12/2014, 06:57
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 9 años, 4 meses
Puntos: 9
Comparar tabla .xls con tabla en base de datos

Hola,

Estoy intentando comparar la información de un .xls con la información que tengo en una Base de datos. Para colmo de dificultad, estoy trabajando por capas, pero creo que voy a obviarlo por ahora...

La idea es que me compare la información de ambas tablas y me muestre en dos GridViews la información completa de cada fila que no se encuentre en la otra tabla, es decir, algo tipo:
Código:
"SELECT * From TableXls AS xls LEFT JOIN TableSql AS sql ON [xls.DNI=sql.NIF] WHERE sql.NIF IS NULL"
El problema es que no se como hacer para trabajar a la vez con las dos conexiones, mi código hasta ahora es:

Código:
 private void Import_To_Grid(string FilePath, string Extension)
{
     string conStr = "";
     switch (Extension)
     {
          case ".xls": //Excel 97-03
               conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
               break;
          case ".xlsx": //Excel 07
               conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
               break;
            }
     conStr = String.Format(conStr, FilePath, "Yes");
     OleDbConnection connExcel = new OleDbConnection(conStr);
     OleDbCommand cmdExcel = new OleDbCommand();
     OleDbDataAdapter oda = new OleDbDataAdapter();
     DataTable dt = new DataTable();
     cmdExcel.Connection = connExcel;

     //Aquí iria el código de la conexión a sql server...

     //Get the name of First Sheet
     connExcel.Open();
     DataTable dtExcelSchema;
     dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
     string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
     connExcel.Close();

     //Read Data from First Sheet
     connExcel.Open();
     //Este sería el sql a modificar
     cmdExcel.CommandText = "SELECT * From [" + SheetName + "] WHERE [MES FORMACIÓN] = '" + InsFecha.Text + "'";
     oda.SelectCommand = cmdExcel;
     oda.Fill(dt);
     connExcel.Close();

     //Bind Data to GridView
     GridView1.Caption = "<h1>Datos de otros meses:</h1>";
     GridView1.DataSource = dt;
     GridView1.DataBind();

        }
¿Alguna idea o guía de por donde empezar?

Muchas Gracias
  #2 (permalink)  
Antiguo 09/12/2014, 13:24
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: Comparar tabla .xls con tabla en base de datos

Buenas compañero,

Creo que este artículo es bastante bueno para la gestión de los Excel...

Si sólo lo necesitas hacer una vez o el excel no va a cambiar nunca o muy rara vez... Posiblemente te compense importarlo de Excel a la base de datos...


Un saludo!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #3 (permalink)  
Antiguo 10/12/2014, 06:35
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 9 años, 4 meses
Puntos: 9
Respuesta: Comparar tabla .xls con tabla en base de datos

Gracias por contestar,

El excel es de otra empresa y llega uno nuevo cada mes, así que la opción de meterlo a la base de datos esta descartada...

De todas formas no tengo problemas a la hora de cargar el excel o la base de datos en un GridView, mi problema es cuándo intento compararlos para crear un tercer Gridview con los valores que no coincidan en ambas tablas, no se me ocurre como ni donde hacer la consulta...
  #4 (permalink)  
Antiguo 10/12/2014, 06:50
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: Comparar tabla .xls con tabla en base de datos

Buenas de nuevo,

Pues la consulta.. La puedes hacer en un ds.Tables(XXX).Select("TU WHERE") o ir registro por registro... evidentemente, no podrás hacer un "saca todos los que estén en una y otra tabla" sino que tendrás que coger una tabla con un for each y comparla con el Select de la otra...

No sé si me he explicado bien.... Sino, avisa y a ver si encuentro un ejemplo rápido y fácil..
Pero en definitiva... Tendrás que trabajar dato a dato.... casi 99% seguro


Un saludo!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #5 (permalink)  
Antiguo 15/12/2014, 04:42
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 9 años, 4 meses
Puntos: 9
Respuesta: Comparar tabla .xls con tabla en base de datos

Gracias otra vez por contestar y perdona el retraso, pero me dieron otra cosa y lo tuve que dejar en stand by.

Al final lo que hice fue recorrer los GridView resultantes con dos for anidados con un break, si encontraba coincidencia y una escritura en tabla si terminaba el segundo for sin encontrar la coincidencia, luego la tabla la paso al tercer GridView y a correr. No se si será lo más eficiente pero funciona y con mis tablas de menos de 500 entradas se ejecuta al instante.

Etiquetas: c#, conexiones, multiples, sql, tablas, xls
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:31.