Principales respuestas
Insertar datos desde Excel a una tabla Sql Server

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.
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
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.
- Editado Gabriel Castro RModerator viernes, 21 de agosto de 2020 4:19
-
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
-
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.
-
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