El proveedor Microsoft.ACE.OLEDB.12.0 no está registrado
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?
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á.
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.
¿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ó.