none
Insertar datos desde Excel a una tabla Sql Server RRS feed

  • Pregunta

  • Buen dia Estimados, 

    Estoy tratando cargar un archivo excel desde un boton e insertar los datos en una tabla que tengo en SQL. El problema que al ejecutar el codigo me arroja errores que los detallo, 

    "El proveedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en el equipo local"

    Este error por lo que lei esta relacionado con la arquitectura del Office que tengo instalado, y vi que la solucion era poner el proyecto en la misma arquitectura que el Office que tengo, el tema que al cambiar la arquitectura a x64, este error lo deja de arrojar y arroja el siguiente 


    Como que ya no detecta el archivo xlsx llamado prueba

    Aqui debajo dejo el codigo con el que estoy trabajando

    Option Strict On
    Option Explicit On
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    'Imports Microsoft.Office.Interop.Excel
    Imports Excel = Microsoft.Office.Interop.Excel
    
    Module Metodos
    
        Public ds As New DataSet
        Public da As New OleDbDataAdapter
        'Permitir conectarnos con nuestro archivo de excel'
        Public conn As OLEDBConnection
    
        'Permitir conectarnos a nuestra base de datos sqlserver'
        Public cnn As SqlConnection
        Public sqlBC As SqlBulkCopy
    
        'Conectar a la base de datos sqlserver'
        Sub abrirConexion()
            Try
                cnn = New SqlConnection("Data Source=MASTER;Initial Catalog=PRINCIPAL;Integrated Security=True")
                cnn.Open()
                MessageBox.Show("CONECTADO")
            Catch ex As Exception
                MessageBox.Show("NO SE CONECTO: " + ex.ToString)
            End Try
        End Sub
    
        Sub ExcelToSqlServer()
            Dim myFileDialog As New OpenFileDialog()
            Dim xSheet As String = ""
    
            With myFileDialog
                .Filter = "Excel Files |*.xlsx"
                .Title = "Open File"
                .ShowDialog()
            End With
    
            If myFileDialog.FileName.ToString <> "" Then
                Dim ExcelFile As String = myFileDialog.FileName.ToString
                xSheet = InputBox("Digite el nombre de la Hoja que desea importar", "Complete")
                conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "data source=" & ExcelFile & "; " & "Extended Properties='Excel 12.0 Xml;HDR=Yes'")
    
                Try
                    conn.Open()
                    da = New OleDbDataAdapter("SELECT * FROM  [" & xSheet & "$]", conn)
                    ds = New DataSet
                    da.Fill(ds)
    
                    sqlBC = New SqlBulkCopy(cnn)
                    sqlBC.DestinationTableName = "PRUEBA"
                    sqlBC.WriteToServer(ds.Tables(0))
                Catch ex As Exception
                    MsgBox("Error: " + ex.ToString, MsgBoxStyle.Information, "Informacion")
                Finally
                    conn.Close()
                End Try
            End If
    
        End Sub
    
    End Module
    


    Aclaro que la tabla tiene 3 campos que tienen el mismo formato que los datos de excel, es mas genere una tabla nueva con 1 sola columna de tipo nvarchar y pasa exactamente lo mismo. Si me pueden guiar un poco sobre por donde tendria que buscar el problema, se los voy a agradecer. Desde ya muchas gracias. 

    jueves, 20 de agosto de 2020 22:35

Respuestas

  • Hola Gabriel, te comento que ya lo pude solucionar, el error estaba en esta linea

    da = New OleDbDataAdapter("SELECT * FROM  [" & xSheet & "$]", conn)

    La cual la reemplace por esta 

    da = New OleDbDataAdapter("SELECT * FROM  [Hoja1$]", conn)

    Y con eso salio andando a la perfeccion. Desde ya agradezco mucho tu ayuda.

    Saludos

    • Marcado como respuesta Guille_87 sábado, 22 de agosto de 2020 13:28
    sábado, 22 de agosto de 2020 13:28

Todas las respuestas

  • Hola Guille_87,

    Te dejo estos dos enlaces que hablan sobre este error, por favor fíjate si alguna de las opciones que te sugieren funciona en tu situación particular: enlace1 y enlace2. Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 


    viernes, 21 de agosto de 2020 0:54
    Moderador
  • Hola Gabriel, antes que nada muchas gracias por la respuesta. Te comento que instale el Database Engine de Access, el tema que al tener instalado el office en 64bits tuve que instalar esa versión del motor, y cuando corro el programa en 64 bits me arroja el 2do error no me arroja el primero, me arroja el error que no reconoce la hoja de excel que quiero importar. Si se te ocurre o conoces alguna otra manera para realizar la importacion avisame y lo pruebo. Estuve pensando hacerlo en 2 pasos pero no seria lo ideal, osea primero pasar el excel a un datagrid y de ese datagrid a la tabla sql, pero la realidad es no tendria mucha practicidad el codigo. Quedo atento a cualquier novedad. Saludos
    viernes, 21 de agosto de 2020 13:14
  • Hola Guille_87,

    Disculpa por el malentendido, acá te dejo una guía oficial sobre como resolver ese problema en específico. Espero que te sea de ayuda. Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    viernes, 21 de agosto de 2020 20:53
    Moderador
  • Hola Gabriel, te comento que ya lo pude solucionar, el error estaba en esta linea

    da = New OleDbDataAdapter("SELECT * FROM  [" & xSheet & "$]", conn)

    La cual la reemplace por esta 

    da = New OleDbDataAdapter("SELECT * FROM  [Hoja1$]", conn)

    Y con eso salio andando a la perfeccion. Desde ya agradezco mucho tu ayuda.

    Saludos

    • Marcado como respuesta Guille_87 sábado, 22 de agosto de 2020 13:28
    sábado, 22 de agosto de 2020 13:28