Pregunta

Tengo una solución de 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 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 'Microsoft.ACE.OLEDB.12.0'   el proveedor no está registrado en el   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 ha dejado de funcionar. Debo estar perdiendo algo pero no sé qué. ¿Alguna idea?

¿Fue útil?

Solución

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

Otros consejos

Básicamente, si está en una máquina de 64 bits, IIS 7 no está (de manera predeterminada) sirviendo aplicaciones de 32 bits, en las que opera el motor de base de datos. Entonces, esto es exactamente lo que haces:

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

2) abra el administrador IIS7 y abra el área Grupos de aplicaciones. En la barra lateral derecha, verá una opción que dice & Quot; Establecer valores predeterminados del grupo de aplicaciones & Quot ;. 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 por defecto. Simplemente haga clic donde dice "falso" para cambiarlo a "verdadero".

4) Reinicie su grupo de aplicaciones (puede hacerlo presionando RECYCLE en lugar de STOP y luego START, que también funcionará).

5) hecho, y su mensaje de error desaparecerá.

¿Está ejecutando un sistema de 64 bits con una base de datos de 32 bits pero la consola con 64 bits? No hay controladores de MS Access que ejecuten 64 bits y reportarían un error idéntico al que informó.


Solución:

¡Eso es! Gracias Arjun Paudel por el enlace. Aquí está la solución que se encuentra en XNA Creator's Club Online. Es por Stephen Styrchak.

El siguiente error me sugiere creer que está compilando para 64 bits:

  

El proveedor 'Microsoft .ACE.OELDB.12.0' no está registrado en la máquina local

No tengo edición express pero ¿son válidos los siguientes pasos en 2008 express?

http://forums.xna.com/forums/t/4377 .aspx # 22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Arjun Paudel


En VC# Express, falta esta propiedad, pero aún puede crear una configuración x86 si sabe dónde buscar.

Parece una larga lista de pasos, pero una vez que sabes dónde están estas cosas, es mucho más fácil. Cualquiera que solo tenga Configuration Manager probablemente lo encuentre útil. Una vez que sepa sobre Tools -> Options, será mucho más intuitivo la próxima vez.

1.En VC # Express 2005, vaya a "Show all settings".
2.En la esquina inferior izquierda del cuadro de diálogo Opciones, marque la casilla que dice "Projects and Solutions".
3.En la vista de árbol del lado izquierdo, seleccione "Show advanced build configuraions.".
4.En las opciones de la derecha, marque la casilla que dice OK
5.Haga clic en Build -> Configuration Manager.
6.Vaya a "<New...>" ...
7.En la columna Plataforma junto a su proyecto, haga clic en el cuadro combinado y seleccione "New platform" setting, choose "x86".
8.En el Close.
9. Haga clic en <=>.
10.Haga clic en <=>.
¡Allí, ahora tienes una configuración x86! ¡Muy fácil! :-)

También recomiendo usar <=> para eliminar la plataforma Any CPU. Realmente no desea eso si alguna vez tiene dependencias de DLL nativas de 32 bits (incluso dependencias indirectas).

Stephen Styrchak | Desarrollador XNA Game Studio http://forums.xna.com/forums/p/4377/ 22601.aspx # 22601


Pensé en intervenir porque encontré esta pregunta al enfrentar un contexto ligeramente diferente del problema y pensé que podría ayudar a otras almas atormentadas en el futuro:

Tenía una aplicación ASP.NET alojada en IIS 7.0 ejecutándose en Windows Server 2008 de 64 bits.

Dado que IIS controla el bitness del proceso, la solución en mi caso fue establecer la configuración Enable32bitAppOnWin64 en true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you- can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

Funciona de manera ligeramente diferente en IIS 6.0 (no puede establecer Enable32bitAppOnWin64 en el nivel del grupo de aplicaciones) http: //www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

Estoy teniendo el mismo problema. Intento instalar Office 2010 de 64 bits en Windows 7 de 64 bits y luego instalar 2007 Office System Driver: Componentes de conectividad de datos.

después de eso, Visual Studio 2008 puede abrir una conexión a un archivo de base de datos MS-Access 2007.

Vea mi publicación en un hilo similar de Stack Exchange https://stackoverflow.com/a/21455677/1368849

Tenía instalada la versión 15, no la 12, que descubrí al ejecutar este código de PowerShell ...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

... que me dio este resultado (he eliminado otras fuentes de datos por brevedad) ...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

Tengo el mismo error en una familia Windows Vista de 64 bits totalmente actualizada con una aplicación .NET que he compilado solo a 32 bits: el programa está instalado en la carpeta programx86 en máquinas de 64 bits. No funciona con este mensaje de error incluso con el proveedor de la base de datos de acceso 2007 instalado, con / sin el SP2 del mismo instalado, IIS instalado y el conjunto de aplicaciones configurado para el soporte de aplicaciones de 32 bits ... sí, he probado todas las soluciones en todas partes y todavía no he tenido éxito.

Cambié mi aplicación a ACE OLE DB.12.0 porque JET4.0 estaba fallando en máquinas de 64 bits, y no es mejor: - / El hilo más prometedor que encontré fue este:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

pero cuando intenta instalar el & "de 64 bits; 2010 Office System Driver Beta: Componentes de conectividad de datos &"; le dice que no puede instalar la versión de 64 bits sin desinstalar todas las aplicaciones de oficina de 32 bits ... e instalar la versión de 32 bits de 2010 Office System Driver Beta: Data Connectivity Components no resuelve el problema inicial, incluso con quot; Microsoft.ACE.OLEDB.12.0 " como proveedor en lugar de " Microsoft.ACE.OLEDB.14.0 " que recomienda esa página (y otras).

Mi próximo intento será seguir esta publicación:

El problema se debe a que la versión incorrecta de OLEDB32.DLL y OLEDB32r.DLL está registrada en el servidor. Si las versiones de 64 bits están registradas, deben estar sin registrar, y luego las versiones de 32 bits deben estar registradas. Para solucionar esto, anule el registro de las versiones ubicadas en% Archivos de programa% / Archivos comunes / Sistema / OLE DB. Luego registre las versiones en la misma ruta pero en el directorio% Program Files (x86)%.

¿Alguien más ha tenido tantos problemas con los proveedores JET4.0 y OLEDB ACE en máquinas de 64 bits? ¿Alguien ha encontrado una solución si ninguna de las otras funciona?

Supongo que si está ejecutando un sistema de 64 bits con una base de datos de 32 bits e intenta ejecutar una consola de 64 bits, los siguientes paquetes deben instalarse en la máquina.

  1. Instalar el motor de base de datos de Microsoft Access 2010 x86 Redistribuible, esta instalación está disponible en: http://www.microsoft.com/download/en/details.aspx ? id = 13255 .
  2. Componentes de conectividad de datos de Office 2007, esta instalación es disponible en: http://www.microsoft.com/download/en/confirmation.aspx ? id = 23734 .
  3. Microsoft Access Database Engine 2010 x64 Redistributable. Vas a necesita descargar el paquete localmente y ejecutarlo con una bandera pasiva. Puede descargar la instalación aquí: http://www.microsoft.com/en-us/download /details.aspx?id=13255 Instalación mediante el símbolo del sistema con el indicador '/ pasivo'. En el símbolo del sistema ejecute el siguiente comando: 'AccessDatabaseEngine_x64.exe / pasivo'

Nota: El orden parece importar, así que si ya tiene algo instalado, desinstale y siga los pasos anteriores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top