El proveedor Microsoft.ACE.OLEDB.12.0 no está registrado

Resuelto Azim J asked hace 15 años • 9 respuestas

Tengo una solución Visual Studio 2008 con dos proyectos (un proyecto de plantilla de Word y una aplicación de consola VB.Net para pruebas). Ambos proyectos hacen referencia a un proyecto de base de datos que abre una conexión a un archivo de base de datos de MS-Access 2007 y tienen referencias a System.Data.OleDb. En el proyecto de base de datos tengo una función que recupera una tabla de datos de la siguiente manera

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Cuando llamo a esta función desde mi proyecto de plantilla de Word 2007, todo funciona bien; sin errores. Pero cuando lo ejecuto desde la aplicación de consola arroja la siguiente excepción

ex = {"El proveedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en la máquina local."}

Ambos proyectos tienen la misma referencia y la aplicación de consola funcionó cuando la escribí por primera vez (hace un tiempo), pero ahora dejó de funcionar. Debo estar perdiendo algo pero no sé qué. ¿Algunas ideas?

Azim J avatar Oct 27 '08 04:10 Azim J
Aceptado

Básicamente, si estás en una máquina de 64 bits, IIS 7 no sirve (de forma predeterminada) aplicaciones de 32 bits, en las que opera el motor de base de datos. Así que esto es exactamente lo que debes hacer:

1) asegúrese de que esté instalado el motor de base de datos 2007, que se puede descargar en: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) abra el administrador de IIS7 y abra el área de Grupos de aplicaciones. En la barra lateral derecha, verá una opción que dice "Establecer valores predeterminados del grupo de aplicaciones". Haga clic en él y aparecerá una ventana con las opciones.

3) el segundo campo hacia abajo, que dice "Habilitar aplicaciones de 32 bits" probablemente esté configurado en FALSO de forma predeterminada. Simplemente haga clic donde dice "falso" para cambiarlo a "verdadero".

4) Reinicie su grupo de aplicaciones (puede hacerlo presionando RECICLAR en lugar de DETENER y luego INICIAR, lo que también funcionará).

5) listo y su mensaje de error desaparecerá.

Matt avatar Apr 15 '2010 20:04 Matt

Tengo un programa Visual Basic con Visual Studio 2008 que usa una base de datos Access 2007 y recibía el mismo error. Encontré algunos hilos que aconsejaban cambiar la configuración de compilación avanzada a x86 que se encuentra en las propiedades del programa si estás ejecutando un sistema de 64 bits. Hasta ahora no he tenido ningún problema con mi programa desde entonces.

 avatar Jan 26 '2009 03:01

¿Está ejecutando un sistema de 64 bits con la base de datos de 32 bits pero la consola de 64 bits? No hay controladores de MS Access que funcionen en 64 bits y que reporten un error idéntico al que usted reportó.

Joel Lucsy avatar Oct 26 '2008 22:10 Joel Lucsy