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

#1 SoftJaén
20/05/2008 - 23:31 | Informe spam
"El Cote" preguntó:

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



Sí, siempre y cuando 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.

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 creación 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 conexión 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 creación 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=Contraseña_Usuario]" & _
"FROM [NombreHojaCalculo$]"

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

' Abrimos la conexión
cnn.Open()

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

MessageBox.Show("Número 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 conexión
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 cláusula FROM. Si por el
contrario deseas exportar un rango de celdas con nombre, entonces sólo
tienes que indicar el nombre del rango, sin el signo $.

Para más información sobre el ISAM de Excel, consulta el siguiente artículo:

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 teoría es la misma.

Un saludo

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
#2 SoftJaén
20/05/2008 - 23:42 | Informe spam
Perdón, el enlace correcto al artículo es el siguiente:

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

Y ya aprovecho para corregir lo siguiente. Donde dice

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

Quería decir

MessageBox.Show("Número de registros afectados: " & n.ToString, _
"Exportar desde Microsoft Excel")

Porque en realidad no se trata de una «importación»; es una «exportación de
datos» de Excel a SQL Server.

Por último, si aún estás utilizando la versión 2000 de Microsoft SQL Server,
en la cadena de conexión tienes que especificar el siguiente driver ODBC:

"IN ''[ODBC;DRIVER={SQL Server};" & _

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
#3 Fernando Gómez
21/05/2008 - 00:01 | Informe spam
On May 20, 4:31 pm, SoftJaén wrote:
"El Cote" preguntó:

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

Sí, siempre y cuando 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.




Puede también emplear también la Microsoft Object Library, que creo
sería mucho mejor que emplear JET, al menos en cuanto a rapidez y el
no tener que depender de un formato en particular. El lado negativo es
que tendrías que meter un poco más de código.

Comentarios adicionales: http://groups.google.com/group/micr...b4b94cf73b

Saludos,
FG.
Respuesta Responder a este mensaje
#4 SoftJaén
21/05/2008 - 00:32 | Informe spam
"Fernando Gómez" escribió:

Puede también emplear también la Microsoft Object Library, que creo
sería mucho mejor que emplear JET, al menos en cuanto a rapidez y el
no tener que depender de un formato en particular. El lado negativo es
que tendrías que meter un poco más de código.

Comentarios adicionales:
http://groups.google.com/group/micr...b4b94cf73b



Hola, Fernando:

La biblioteca «Microsoft Object Library» la desconozco, pero leyendo el
contenido del enlace que has indicado, parece ser que se trata de utilizar
la propia biblioteca de Microsoft Excel a través de la capa COM Interop.

Si es así, yo, personalmente, me decido por utilizar el motor Microsoft Jet,
y me olvido de utilizar una versión en concreto de Microsoft Excel (si
utilizo una referencia a la biblioteca de Excel), o de cualquier versión
instalada de Excel (si utilizo el espacio de nombres System.Reflection, por
lo que no es necesario referenciar en el proyecto cualquier versión de
Excel).

Hasta la fecha, no he tenido ningún tipo de problema con el ISAM de Excel
del motor Microsoft Jet, y te aseguro que es rápido y fácil de utilizar.

Por supuesto, en cuanto a gustos no hay nada escrito. :-)

Un saludo

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
#5 Fernando Gómez
21/05/2008 - 00:49 | Informe spam
On May 20, 5:32 pm, SoftJaén wrote:
"Fernando Gómez" escribió:

> Puede también emplear también la Microsoft Object Library, que creo
> sería mucho mejor que emplear JET, al menos en cuanto a rapidez y el
> no tener que depender de un formato en particular. El lado negativo es
> que tendrías que meter un poco más de código.

> Comentarios adicionales:
>http://groups.google.com/group/micr...0a8067b...

Hola, Fernando:

La biblioteca «Microsoft Object Library» la desconozco, pero leyendo el
contenido del enlace que has indicado, parece ser que se trata de utilizar
la propia biblioteca de Microsoft Excel a través de la capa COM Interop.



Lo siento, me refería a la Microsoft Office Object Library. Viene con
Office 2003 (COM Interop) y Office 2007 (CLI).


Si es así, yo, personalmente, me decido por utilizar el motor Microsoft Jet,
y me olvido de utilizar una versión en concreto de Microsoft Excel (si
utilizo una referencia a la biblioteca de Excel), o de cualquier versión
instalada de Excel (si utilizo el espacio de nombres System.Reflection, por
lo que no es necesario referenciar en el proyecto cualquier versión de
Excel).

Hasta la fecha, no he tenido ningún tipo de problema con el ISAM de Excel
del motor Microsoft Jet, y te aseguro que es rápido y fácil de utilizar.




Jet agrega más capas de procesamiento. No dudo que sea rápido, pero
pudiese ser más rápido. Además, no necesitas ordenar tu hoja de Excel
para que luzca como base de datos. Esto último, quizás, puede ser lo
más interesante para el OP.

Por supuesto, en cuanto a gustos no hay nada escrito. :-)



Jejeje, por supuesto. Ya vez, yo sigo pensando en programar en C++ :P
jejeje.


Un saludo




Saludos,
FG.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida