none
Insertar en SQL Server datos de una hoja de Excel

    Question

  • Hola:

    Tengo una hoja de excel 2010 que necesito exportar a una base de sql server 2005 una sola vez. Quisiera preguntar si conocen alguna manera fácil de hacerlo porque son muchos datos. Todo esto con Visual basic 2010.

    Gracias

    Thursday, April 26, 2012 5:04 AM

Answers

  • Hola:

    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, hay varias maneras de exportar los datos de Excel a una tabla de una base de datos de SQL Server. Quizás la más sencilla, a mi entender, sea la de utilizar el ISAM para Excel del motor Microsoft ACE para abrir un libro de trabajo de Excel y ejecutar una consulta SQL de creación de tabla (SELECT * INTO), donde se deberá de indicar nuestra intención de utilizar el driver ODBC de Microsoft SQL Server 2005 para conectarnos con dicho servidor.

    Aquí tienes un ejemplo:

    Imports System.Data.OleDb
            ' Construimos la cadena de conexión Ole Db, 
            ' indicando que vamos a utilizar el ISAM para Excel 
            ' 
            Dim connString As String = _
                "Provider = Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source = C:\Mis documentos\Libro1.xlsx;" & _
                "Extended Properties = 'Excel 12.0 Xml;HDR=Yes'"
            Try
                ' Creamos un nuevo objeto Connection 
                ' 
                Using cnn As New OleDbConnection(connString)
                    ' Configuramos un objeto Command para ejecutar 
                    ' la consulta SQL de creación de tabla 
                    ' 
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    ' Creamos la consulta SQL de creación de tabla, 
                    ' indicando que vamos a utilizar el driver 
                    ' ODBC de Microsoft SQL Native Client
                    ' (SQL Server 2005).
                    ' 
                    cmd.CommandText = _
                        "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$]"
                    ' Abrimos la conexión 
                    cnn.Open()
                    ' Ejecutamos la consulta 
                    Dim n As Integer = cmd.ExecuteNonQuery()
                    MessageBox.Show("Nº de registros afectados: " & CStr(n), _
                                    "Exportar desde Microsoft Excel")
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    Con la anterior instrucción SQL lo que hacemos es crear una nueva tabla en la base de SQL Server con los datos de una hoja de cálculo. Una vez que los datos se encuentren en la base de SQL Server, ya estás en condiciones de hacer con ellos lo que te parezca conveniente. :-)

    Te comento que si deseas exportar una hoja completa de Excel, el nombre de la hoja tiene que acabar con 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

    Los ejemplos fueron escritos en su día 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.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    Thursday, April 26, 2012 6:01 AM
    Moderator

All replies

  • podrias aplciar las tecncias que aqui se describen

    http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/857f4f67-194f-4106-b914-56f8bbc0c7d5


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Thursday, April 26, 2012 5:11 AM
  • Hola:

    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, hay varias maneras de exportar los datos de Excel a una tabla de una base de datos de SQL Server. Quizás la más sencilla, a mi entender, sea la de utilizar el ISAM para Excel del motor Microsoft ACE para abrir un libro de trabajo de Excel y ejecutar una consulta SQL de creación de tabla (SELECT * INTO), donde se deberá de indicar nuestra intención de utilizar el driver ODBC de Microsoft SQL Server 2005 para conectarnos con dicho servidor.

    Aquí tienes un ejemplo:

    Imports System.Data.OleDb
            ' Construimos la cadena de conexión Ole Db, 
            ' indicando que vamos a utilizar el ISAM para Excel 
            ' 
            Dim connString As String = _
                "Provider = Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source = C:\Mis documentos\Libro1.xlsx;" & _
                "Extended Properties = 'Excel 12.0 Xml;HDR=Yes'"
            Try
                ' Creamos un nuevo objeto Connection 
                ' 
                Using cnn As New OleDbConnection(connString)
                    ' Configuramos un objeto Command para ejecutar 
                    ' la consulta SQL de creación de tabla 
                    ' 
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    ' Creamos la consulta SQL de creación de tabla, 
                    ' indicando que vamos a utilizar el driver 
                    ' ODBC de Microsoft SQL Native Client
                    ' (SQL Server 2005).
                    ' 
                    cmd.CommandText = _
                        "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$]"
                    ' Abrimos la conexión 
                    cnn.Open()
                    ' Ejecutamos la consulta 
                    Dim n As Integer = cmd.ExecuteNonQuery()
                    MessageBox.Show("Nº de registros afectados: " & CStr(n), _
                                    "Exportar desde Microsoft Excel")
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    Con la anterior instrucción SQL lo que hacemos es crear una nueva tabla en la base de SQL Server con los datos de una hoja de cálculo. Una vez que los datos se encuentren en la base de SQL Server, ya estás en condiciones de hacer con ellos lo que te parezca conveniente. :-)

    Te comento que si deseas exportar una hoja completa de Excel, el nombre de la hoja tiene que acabar con 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

    Los ejemplos fueron escritos en su día 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.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    Thursday, April 26, 2012 6:01 AM
    Moderator
  • Muchas gracias Enrique. Ha funcionado a la primera.

    Thursday, April 26, 2012 12:43 PM