Cargar hoja de excel a SQL SERVER

20/05/2008 - 21:54 por El Cote | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_000A_01C8BA89.5860E490

Hola compañeros...

¿Conocen alguna forma óptima de cargar una hoja de excel con muchísimos registros a SQL SERVER?

Lógicamente haciendo esto desde .NET.

Muchas gracias!
=_NextPart_000_000A_01C8BA89.5860E490

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6000.16640" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px"
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV><FONT face=Arial size=2>Hola compañeros...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>¿Conocen alguna forma óptima de cargar una hoja de
excel con muchísimos registros a SQL SERVER?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Lógicamente haciendo esto desde .NET.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Muchas gracias!</FONT></DIV></BODY></HTML>

=_NextPart_000_000A_01C8BA89.5860E490--

Preguntas similare

Leer las respuestas

#11 SoftJaén
21/05/2008 - 20:32 | Informe spam
"Fernando Gómez" escribió:

Sí, en tu ejemplo solo usas OleDB, pero el ISAM (que es llamado por
éste) a su vez emplea ODBC y el driver de Excel.



¿Estás seguro? Yo creo que no, porque en realidad el ISAM de Excel para la
versión 4.0 del motor Microsoft Jet, es el archivo «msexcl40.dll», que
generalmente se encuentra instalado en la carpeta System32.

¿Que dicha biblioteca utiliza internamente el driver de Excel? Lo ignoro por
completo, pero que tampoco me preocupa.

Sí, a través de los diferentes SDKs y los puedes bajar de la página de
downloads, de Microsoft. Obvio solo vienen librerías para desarrollo,
y no tienes acceso a la GUI de Excel (et. al.), pero sirven
precísamente para eso, para hacer los desarrollos.



¡Ya me extrañaba a mí!

SQL Server guarda datos, no formatos, en efecto. Excel guarda ambos.
Para una hoja de cálculo en Excel que se emplee en una empresa para
llevar controles, emplear ISAM forzaría a que, y cito, "los datos de
la hoja de cálculo se encuentre en un formato de tabla, es decir, la
típica estructura de filas y columnas". Es decir, según tu primer
correo, si la hoja de cálculo no se encuentra en un "formato de
tabla", no se puede emplear ISAM (u ODBC u OLEDB). Si el OP tiene una
hoja de cálculo que no siga este formato, tendría que cambiarlo para
hacerlo funcionar. Mi respuesta iba en ese sentido: empleando las
Office Object Libraries no necesita cambiar el formato de su hoja,
pues puede accesar a las celdas de forma directa.



Y mi respuesta iba en el sentido contrario: si los datos de la hoja de Excel
están dispuestos en la típica estructura de tabla (que es lo que suelo decir
siempre en estos casos), utiliza el ISAM de Excel para efectuar el traspaso
de datos, y asunto resuelto: es fácil de utilizar, y el impacto en cuanto a
rendimiento es insignificante. Y si la hoja de Excel no tiene un formato
tabular, pues habrá que buscarse la vida por otros derroteros, y utilizar
los objetos de la biblioteca de Excel para llevar el traspaso de datos a
buen término.

Pero digo yo que antes se tendrá que evaluar la situación, y sopesar lo que
interesa más, dependiendo de la situación que se presente. Pero no creo que
la solución definitiva sea utilizar la bilbioteca de Excel para efectuar un
simple traspaso de datos sin más. No sé. Es como si queremos «cazar moscas a
cañonazos»; en unos casos será una solución viable, y en otros no lo será
tanto, o no merece la pena. Es mi opinión personal.

Nope, con los objetos de la biblioteca de Excel puedes acceder a las
celdas dada sus coordenadas (i.e. H8). Sí tendrías que saber en qué
celda está qué información, pero no tendrías que cambiar el formato.



Y con el ISAM de Excel también se puede hacer, simplemente ejecutando la
oportuna consulta SQL de selección. Podemos especificar los campos o
columnas que deseamos seleccionar, y si le añadimos una cláusula WHERE,
filtraríamos los registros o filas cuyos datos deseamos recuperar.

¡Que insisto! Que dependiendo de los casos y las situaciones que se
presenten, unas veces será factible utilizar el ISAM de Excel y otras veces
no lo será tanto. :-)

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#12 El Cote
22/05/2008 - 17:45 | Informe spam
Gracias Alberto por tu colaboración...

Podrías facilitarme un ejemplo de cómo hacer por programación o una URL
donde vea cómo hacerlo?

Gracias
Respuesta Responder a este mensaje
#13 Alberto Poblacion
23/05/2008 - 08:51 | Informe spam
"El Cote" wrote in message
news:
Gracias Alberto por tu colaboración...

Podrías facilitarme un ejemplo de cómo hacer por programación o una URL
donde vea cómo hacerlo?



Si te refieres a cómo lanzar desde programa el paquete SSIS, tienes un
resumen de los métodos disponibles en este blog:
http://blogs.msdn.com/michen/archiv...cally.aspx

En CodeProject tienes un ejemplo de código .Net:
http://www.codeproject.com/KB/datab...by_C_.aspx

Si lo que quieres saber es cómo crear el paquete SSIS, si no sabes
crearlo desde el business Intelligence Development Studio, lo más sencillo
sería usar el Asistente. Tienes un mini-tutorial en Technet (y en los BOL de
Sql Server):
http://technet.microsoft.com/en-us/...65298.aspx
Respuesta Responder a este mensaje
#14 Giovo
30/07/2008 - 20:14 | Informe spam
A que te refieres con "INTO NombreTablaSQLServer "

"SoftJaén" wrote:

"El Cote" pregunt:

> Conocen alguna forma ptima de cargar una hoja de excel con
> muchsimos registros a SQL SERVER?

S, siempre y cuando los datos de la hoja de clculo se encuentre en un
formato de tabla, es decir, la tpica estructura de filas y columnas.

Si es as, puedes utilizar el ISAM para Excel del motor Microsoft Jet, para
abrir un libro de trabajo y ejecutar una consulta SQL de creacin de tabla
(SELECT * INTO), donde se deber de especificar que vamos a utilizar el
driver ODBC de Microsoft SQL Server 2005 para conectarnos con dicho
servidor.

Aqu tienes un ejemplo:

' Construimos la cadena de conexin Ole Db,
' indicando que vamos a utilizar el ISAM para Excel
'
Dim connString As String = _
"Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\Mis documentos\Libro1.xls;" & _
"Extended Properties = 'Excel 8.0;HDR=Yes'"

' Creamos un nuevo objeto Connection
'
Dim cnn As New OleDbConnection(connString)

Try
' Creamos la consulta SQL de creacin de tabla,
' indicando que vamos a utilizar el driver
' ODBC de Microsoft SQL Native Client
'
Dim sql As String = _
"SELECT * INTO NombreTablaSQLServer " & _
"IN ''[ODBC;DRIVER={SQL Native Client};" & _
"Server=Nombre_Instancia_Servidor_SQL;" & _
"Database=Nombre_Base_Datos_SQL2005;" & _
"UID=Cuenta_Usuario;" & _
"PWD=Contrasea_Usuario]" & _
"FROM [NombreHojaCalculo$]"

' Configuramos un objeto Command para ejecutar
' la consulta SQL de creacin de tabla
'
Dim cmd As New OleDbCommand(sql, cnn)

' Abrimos la conexin
cnn.Open()

' Ejecutamos la consulta
Dim n As Integer = cmd.ExecuteNonQuery()

MessageBox.Show("Nmero de registros afectados: " & n.ToString, _
"Importar desde SQL Server 2005")

Catch ex As OleDbException
MessageBox.Show(ex.Errors(0).Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
' Cerramos la conexin
cnn.Close()
cnn = Nothing

End Try

Te comento que si deseas exportar una hoja completa de Excel, el nombre de
la hoja tiene que acabar en el signo $, y todo ello encerrado entre
corchetes, tal y como aparece en el ejemplo tras la clusula FROM. Si por el
contrario deseas exportar un rango de celdas con nombre, entonces slo
tienes que indicar el nombre del rango, sin el signo $.

Para ms informacin sobre el ISAM de Excel, consulta el siguiente artculo:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/arti..._excel.htm

Los ejemplos fueron escritos para Visual Basic 6.0, los cuales puedes
adaptarlos a Visual Basic .net, pero la teora es la misma.

Un saludo

Enrique Martnez
[MS MVP - VB]

Nota informativa: La informacin contenida en este mensaje, as como el
cdigo fuente incluido en el mismo, se proporciona COMO EST, sin
garantas de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en prctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida