none
Error Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine al leer archivos excel RRS feed

  • Pregunta

  • Buenas noches.

    Tengo un aplicativo Web en Vb.net que archivos Excel para después cargarlos en una base de datos SQL Server. 

    En mi web.config tengo la siguiente linea para la conexión:

    <add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};Extended Properties='Excel 8.0;HDR={1};IMEX=1;'" />

    Luego en mi codigo Vb leo el archivo así:

    conStr = String.Format(conStr, FilePath, isHDR)
            Dim connExcel As New OleDbConnection(conStr)
            Dim cmdExcel As New OleDbCommand()
            Dim oda As New OleDbDataAdapter()
            cmdExcel.Connection = connExcel
            connExcel.Open()
            RddlSheets.Items.Clear()
            RddlSheets.Items.Insert(0, "--Seleccione la hoja--")
            RddlSheets.DataSource = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            RddlSheets.DataTextField = "TABLE_NAME"
            RddlSheets.DataValueField = "TABLE_NAME"
            RddlSheets.DataBind()
            connExcel.Close()

    Cuando lo trato de leer se genera el error. Revisando en internet dicen que debo instalar alguno de los siguientes componentes:

    Microsoft Access Database Engine 2010 Redistributable

    Microsoft Access Database Engine 2010

    2007 Office System Driver: Data Connectivity Components

    Sin embargo por temas de seguridad y vulnerabilidades me dicen que debo actualizar la versión. Mi pregunta es si existe algún componente actualizado que me permita registrar el Microsoft.ACE.OLEDB.12.0 Provider?

    Gracias

    sábado, 20 de junio de 2020 0:04

Todas las respuestas

  • Muy probablemente tu problema sea de 32 / 64 bits.

    Si el programa lo ejecutas en 32 bits, necesitas tener instalada la versión de 32 bits del Microsoft.ACE.OLEDB.12.0 Provider. Y recíprocamente, si ejecutas el programa en 64 bits, entonces necesitas la versión de 64 bits del Microsoft.ACE.OLEDB.12.0 Provider. Si los bits no coinciden, entonces te da el error de que "no está instalado", aunque en realidad sí que tengas instalada una versión pero no con los mismos bits.

    Si después de investigarlo llegas a la conclusión de que la versión instalada es la de 32 bits pero tu programa se ejecuta en 64, entonces hay una manera de forzar a tu programa a que se ejecute en 32 para que coincida con el provider: acude a las Propiedades del Proyecto, y en la pestaña de compilación, donde dice "Any CPU" cámbialo por "x86".

    sábado, 20 de junio de 2020 7:27
  • Hola. Si el problema creo que es ese. Pero ahora bien, voy a tratar de realizar el cambio que mencionas para ejecutar la aplicación en x86 y no tengo la opción en Visual Studio. Solo me aparece AnyCPU.
    sábado, 20 de junio de 2020 12:35
  • NO es la opción que aparece en la parte de arriba de la pantalla principal de Visual Studio.La que yo digo es esta que se ve en la imagen de las Propiedades del Proyecto:

    Captura de pantalla

    sábado, 20 de junio de 2020 15:54
  • NO es la opción que aparece en la parte de arriba de la pantalla principal de Visual Studio.La que yo digo es esta que se ve en la imagen de las Propiedades del Proyecto:

    Captura de pantalla

    Hola Alberto. El tema esta en que yo no tengo esa pantalla me imagino debido al tipo de proyecto. Esta es la pantalla que me aparece:

    Entonces no se como forzar a que el sitio web se ejecute a 64 bits.

    domingo, 21 de junio de 2020 0:45
  • El tema esta en que yo no tengo esa pantalla me imagino debido al tipo de proyecto.

    Ah, por lo que veo en las propiedades se trata de un proyecto web. En ese caso es distinto. En un proyecto que genere un fichero .exe se cambia donde yo te dije, pero un proyecto web solo genera DLLs que luego son ejecutadas desde IIS. En este caso, para forzarlo a que se ejecute en 32 bits hay que cambiar una opción en las propiedades del Pool en IIS. Si no recuerdo mal, se llama algo así como "Enable 32 bit applications" y está en las propiedades avanzadas del Pool.

    domingo, 21 de junio de 2020 6:38
  • El tema esta en que yo no tengo esa pantalla me imagino debido al tipo de proyecto.

    Ah, por lo que veo en las propiedades se trata de un proyecto web. En ese caso es distinto. En un proyecto que genere un fichero .exe se cambia donde yo te dije, pero un proyecto web solo genera DLLs que luego son ejecutadas desde IIS. En este caso, para forzarlo a que se ejecute en 32 bits hay que cambiar una opción en las propiedades del Pool en IIS. Si no recuerdo mal, se llama algo así como "Enable 32 bit applications" y está en las propiedades avanzadas del Pool.

    Hola Alberto. El problema esta en que por políticas debo ejecutar la aplicación a 64 bits y no a 32 bits. Como puedo compilar esas Dll a 64. Gracias
    martes, 23 de junio de 2020 14:38
  • El tema esta en que yo no tengo esa pantalla me imagino debido al El problema esta en que por políticas debo ejecutar la aplicación a 64 bits y no a 32 bits. Como puedo compilar esas Dll a 64. Gracias

    No, no tienes que hacer nada para compilar la DLL a 64 bits. De manera predeterminada ya se ejecuta en 64 bits si la máquina es de 64 bits. Lo que ocurre es que entonces no puede llamar a la versión de 32 bits del Microsoft.ACE.OLEDB.12.0. Tendrás que descargar e instalar la versión de 64 bits del Microsoft.ACE.OLEDB.12.0... cosa que de todas maneras deberías haber hecho ya, en lugar de instalar la versión de 32 bits, si es que tienes una política que dice que debes ejecutar las aplicaciones en 64 bits :-)

    martes, 23 de junio de 2020 16:53