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--
 

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.

Preguntas similares