Foros del Web » Programación para mayores de 30 ;) » .NET »

Comparar datos excel desde C# e insertar o actualizar en SQL

Estas en el tema de Comparar datos excel desde C# e insertar o actualizar en SQL en el foro de .NET en Foros del Web. Buenas a todos, antes que nada un cordial saludo. Escribo para ver si me pueden ayudar con una parte en la que tengo que desde ...
  #1 (permalink)  
Antiguo 01/05/2015, 03:53
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Comparar datos excel desde C# e insertar o actualizar en SQL

Buenas a todos, antes que nada un cordial saludo.

Escribo para ver si me pueden ayudar con una parte en la que tengo que desde un archivo excel donte tengo las columnas ID, Descripcion y Precio entonces con un control FileUpload cargo el archivo pero tendría que leer en la columna ID cada uno y ver si existe en la base de datos en la Tabla Items donde tengo de igual forma ID, Descripcion,Precio entonces si el ID existe comparo el precio y actualizo si es diferente y inserto en la Tabla con el ID, Descripcion, y precio de el excel.

Tenia algo así pero no se como manipular los datos sí alguien me podría ayudar se lo agradezco. Saludos

Código ASP:
Ver original
  1. protected void Button1_Click(object sender, EventArgs e)
  2.         {
  3.             if(FileUpload1.HasFile){
  4.                 string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));
  5.                 FileUpload1.PostedFile.SaveAs(path);
  6.                 OleDbConnection OleDbcon = new OleDbConnection("Provider = Microsoft.Ace.OLEDB.12.0; Data Source=" + path + ";Extended Properties= Excel 12.0;");
  7.                 OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$]", OleDbcon);
  8.                 OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
  9.  
  10.                 OleDbcon.Open();
  11.                 DbDataReader dr = cmd.ExecuteReader();
  12.                
  13.             }
  14.         }
  #2 (permalink)  
Antiguo 01/05/2015, 11:48
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Hola alemaxxx

Yo lo haria de la sig. manera

Insertar todos los datos del excel a una tabla en la bd de datos de origen, ejemplo, tablaItems_Temporal, una ves teniendo cargados ahi todos los datos del excel, hago una comparación con la tabla real, mediante un left join.

Algo como esto.


Código:
INSERT INTO tablaItems
SELECT t1.* FROM tablaItems_Temporal AS t1
LEFT JOIN tablaItems AS t2 ON (t1.Id = t2.Id)
WHERE t2.Id IS NULL
UPDATE tablaItems
SET Precio = t1.Precio
FROM
(
SELECT * FROM tablaItems_Temporal AS t1
LEFT JOIN tablaItems AS t2 ON (t1.Id_Temp = t2.Id)
WHERE t2.Id IS NOT NULL
) AS t1 WHERE t1.Id_Temp = tablaItems.Id
Osea, primero comparas, que el ID exista, si no existe, inserta. Si el Id existe, compara que el precio sea igual, si no actualiza, eso hace el codigo de arriba. Espero te sirva.

Saludos
__________________
http://binarysuns.com.mx/
  #3 (permalink)  
Antiguo 02/05/2015, 03:07
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Hola Namiwis muchas gracias, lo unico es que son como 3000 items y creo que tardaría mucho pero lo probaré, de nuevo muchas gracias por tu idea. Saludos
  #4 (permalink)  
Antiguo 02/05/2015, 16:01
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

No es tanto, yo lo ocupo para 2 tablas que contienen mas de 1millon de registros y tarda como 5minutos, claro con la arquitectura de un servidor.

Saludos.
__________________
http://binarysuns.com.mx/
  #5 (permalink)  
Antiguo 09/05/2015, 11:01
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Hola que tal?, estuve tratando de hacer de la forma que me dijiste pero me da un error en la última línea donde dice as t1.

Código SQL:
Ver original
  1. INSERT INTO Item
  2. SELECT t1.* FROM Item_temp AS t1
  3. LEFT JOIN Item AS t2 ON (t1.PartNumber = t2.PartNumber)
  4. WHERE t2.PartNumber IS NULL
  5. UPDATE Item
  6. SET Price = t1.Price
  7. FROM
  8. (
  9. SELECT * FROM Item_Temp AS t1
  10. LEFT JOIN Item AS t2 ON (t1.PartNumber = t2.PartNumber)
  11. WHERE t2.PartNumber IS NOT NULL
  12. ) AS t1 WHERE t1.PartNumber = Item.PartNumber
  #6 (permalink)  
Antiguo 09/05/2015, 11:26
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Aqui está

Otra cosa sí le agrego la condición que solo lo cambie cuando el precio sea diferente lo reescribiría así? :
Código SQL:
Ver original
  1. UPDATE Item
  2. SET Price = t1.Price
  3. FROM
  4. (
  5. SELECT * FROM Item_Temp AS t1
  6. LEFT JOIN Item AS t2 ON (t1.PartNumber = t2.PartNumber)
  7. WHERE t2.PartNumber IS NOT NULL AND t1.Price <> t2.Price
  8. ) AS t1 WHERE t1.PartNumber = Item.PartNumber

WHERE t2.PartNumber IS NOT NULL AND t1.Price <> t2.Price

Muchas Gracias Namiwis,

Saludos Cordiales,

Última edición por alemaxxx; 09/05/2015 a las 11:31
  #7 (permalink)  
Antiguo 11/05/2015, 15:26
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Hola alemaxxx disculpa la tardansa en responder

Si asi comparas diferente en sql <>

Saludos :)
__________________
http://binarysuns.com.mx/
  #8 (permalink)  
Antiguo 11/05/2015, 15:44
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Gracias , pero el Update no me funciona como te mostré arriba me da un error :(
  #9 (permalink)  
Antiguo 11/05/2015, 16:38
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Ok, supongo tus campos de la tabla temp, se llaman igual, cambiales el nombre por no se nombre_Temp

para que quede algo como

Código:
UPDATE Item
SET Price = t1.Price
FROM
(
SELECT * FROM Item_Temp AS t1
LEFT JOIN Item AS t2 ON (t1.PartNumber_Temp = t2.PartNumber)
WHERE t2.PartNumber IS NOT NULL AND t1.Price_Temp <> t2.Price
) AS t1 WHERE t1.PartNumber_Temp = Item.PartNumber
Y no deberias tener problemas.

Saludos
__________________
http://binarysuns.com.mx/
  #10 (permalink)  
Antiguo 12/05/2015, 15:00
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Mil gracias me funciono perfecto, no tenia idea que se podía hacer así ... Por cierto hay alguna forma de hacer que se muestre un % para ver cuanto falta por verificar, como son muchos registros

Saludps
  #11 (permalink)  
Antiguo 12/05/2015, 17:22
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Claro que si!

Ya sea con un ProgressBar o un simple label con el % avanzado, tendrias que manejar un SubProceso, "backgroundWorker"

Por aca tienes una manera simple de hacerlo

http://stackoverflow.com/questions/2...ask-in-c-sharp

Espero te sirva para darte una idea.

Saludos
__________________
http://binarysuns.com.mx/
  #12 (permalink)  
Antiguo 13/05/2015, 03:30
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Comparar datos excel desde C# e insertar o actualizar en SQL

Gracias a ver como me queda :D

Etiquetas: excel, sql
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 03:50.