Nuestro equipo de redactores ha estado horas investigando la respuesta a tus dudas, te regalamos la solución de modo que nuestro deseo es resultarte de mucha ayuda.
Solución:
La referencia a la Access Interop
bits no tiene nada que ver con su excepción y Access Interop no es necesario para usar las clases en el System.Data.OleDb
.
El problema surge cuando tienes tu aplicación compilada para AnyCPU Platform
está ejecutando en un sistema de 64 bits y el proveedor ADO.NET instalado (Microsoft ACE.OLEDB.12.0) es la versión de 32 bits.
Al usar el AnyCpu
Plataforma de destino, su código se ejecutará como código de 64 bits en sistemas de 64 bits y como código de 32 bits en sistemas de 32 bits. Una aplicación ejecutada como 64 bits no puede usar controladores de 32 bits (y viceversa). Ahora agregue a la mezcla el hecho de que Microsoft.ACE.OLEDB.12.0 tiene dos versiones diferentes. Uno para 64 bits y otro para 32 bits y no se pueden instalar juntos en la misma máquina.
La solución más sencilla es cambiar la plataforma de destino de su aplicación a través del menú de Visual Studio
BUILD -> Configuration Manager -> Active Solution Platform -> x86
Si el x86
la opción aún no está allí, luego seleccione NUEVO, asígnele un nombre x86
, Copy Settings from AnyCPU
y comprobar Create new project platforms
Si cree que usar una aplicación de 32 bits en un sistema operativo de 64 bits es una pérdida de rendimiento o algo que debe evitarse, piénselo dos veces y lea esta referencia donde se examinan críticamente los PRO y los CONTRA de AnyCpu. Si no tiene una razón específica para usar AnyCpu
es mejor quedarse con x86
.
Por supuesto, otra opción es desinstalar la versión de 32 bits e instalar la versión de 64 bits de ACE desde aquí y luego ejecutar su aplicación como AnyCpu en sistemas de 64 bits. Pero esto podría ser una pesadilla para sus escenarios de implementación. ¿Qué sucede si la versión de Microsoft Office de 32 bits está instalada en su máquina de destino x64? Office instala su versión de ACE compatible con bits y, como se dijo, no es posible tener 32 bits y 64 bits de ACE instalados en la misma máquina.
Ahora también debe pedirle a su cliente que reinstale Office como 64 bits para mantener feliz su aplicación de 64 bits.
ACTUALIZAR
La situación ha cambiado un poco con las versiones más recientes de Visual Studio. Ahora hay una nueva opción que es la predeterminada para nuevos proyectos. Se llama AnyCPU Prefiere el modo de 32 bits. Más detalles en este enlace: Lo que AnyCPU realmente significa a partir de .NET 4.5 y Visual Studio 11 y otra publicación interesante (aunque con respecto a Sql Server Compact) es esta El problema con cualquier CPU: prefiera 32 bits: BadImageFormatException
Cambie en la ‘configuración avanzada’ de su grupo de aplicaciones para permitir ejecutar programas de 32 bits … eso lo hizo por mí.
Tengo un problema similar cuando leemos un archivo de Excel.
Historia del problema:
Recientemente migramos nuestra aplicación de 32 bits a 64 bits debido al requisito de memoria. Para eso migramos nuestro Windows 7 de 32 bits a 64 bits. Pero aun así instalamos Office de 32 bits en nuestras máquinas.
debido a esto, tuvimos este problema al importar datos de Excel a la aplicación.
Solución,
Descargué la versión de 64 bits de http://www.microsoft.com/en-us/download/details.aspx?id=13255 y la instalé con el argumento como,
AccessDatabaseEngine_x64.exe /pasivo
Sin ningún cambio de código, mi problema se resuelve.
Nota:
En el sistema operativo de 64 bits y la oficina de 64 bits, mi funcionalidad funcionaba bien sin esta solución. Esta solución solo es necesaria mientras nuestra aplicación se ejecuta en 64 bits en un sistema operativo de 64 bits que tiene instalada una oficina de 32 bits.
Si guardas alguna suspicacia o disposición de enriquecer nuestro ensayo eres capaz de añadir una disquisición y con deseo lo estudiaremos.