Consultar bases de datos Jet / archivos Excel con C # bajo el sistema operativo x64

StackOverflow https://stackoverflow.com/questions/400684

  •  03-07-2019
  •  | 
  •  

Pregunta

Así que he aprendido que el proveedor de datos Microsoft.Jet.OLEDB.4.0 para consultar fuentes de datos como los archivos Microsoft Access MDB y las hojas de cálculo de Excel no funciona en sistemas operativos Windows de 64 bits.

¿Qué se supone que debo usar para consultar estos tipos de archivos en aplicaciones .NET 3.5 (C #) con el fin de garantizar la compatibilidad en entornos x86 y x64? He rastreado Internet y Parece que no se puede encontrar una respuesta directa sobre cómo manejar esta incompatibilidad.

También he intentado usar un proveedor ODBC y un proveedor MSDASQL sin suerte, ya que parecen tener las mismas excepciones que el proveedor Microsoft.JET.OLEDB.4.0 cuando se usa en un entorno x64 (a menos que esté haciendo algo) flagrantemente equivocado con estos otros dos proveedores, aunque funcionan bien en mi entorno Windows XP x86).

He encontrado personas que dicen que necesito usar % WINDIR% \ System32 \ odbcad32.exe para conectividad ODBC en sistemas x64, pero tengo una idea de cómo utilizar esto.

Exepción de ejemplo lanzada bajo x64:

  

************** Exception Text **************   System.InvalidOperationException: el proveedor 'Microsoft.Jet.OLEDB.4.0' no está registrado en la máquina local.      en System.Data.OleDb.OleDbServicesWrapper.GetDataSource (OleDbConnectionString constr, DataSourceWrapper & amp; datasrcWrapper)      en System.Data.OleDb.OleDbConnectionInternal..ctor (constr. OleDbConnectionString, conexión OleDbConnection)      en System.Data.OleDb.OleDbConnectionFactory.CreateConnection (opciones DbConnectionOptions, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)

¿Fue útil?

Solución

Todo lo que he visto en mi propia investigación reciente confirma lo que está viendo, que simplemente no hay un controlador Jet de 64 bits. Además, encontré una publicación en ESTA secuencia que parece confirmar que el MSDASQL de 64 bits no ayudará, ya que en realidad es solo un contenedor (consulte la última publicación, con fecha del 8 de mayo de Ricky Wen). Su única opción es enlazar a través de un proxy de 32 bits, quizás otro servidor SQL de 32 bits. Puedo terminar haciendo esto yo mismo, hasta que pueda mover los datos de Jet a SQL.

Otros consejos

lo que está sucediendo aquí es que un ensamblaje x64 está intentando llamar a un componente COM x86. La aplicación x64 no verá los registros COM en el registro primario x64, ya que están en la sección wow6432node.

La solución más sencilla es crear la aplicación con una plataforma de destino x86 y dejar que se ejecute en WOW más adelante en su máquina x64. La aplicación se ejecutará como de 32 bits y podrá ver los objetos COM de 32 bits que necesita.

Ahora hay un controlador ODBC de 64 bits para JetSQL. Es el Microsoft Access Database Engine 2010 Redistributable . No lo he usado para OLEDB, pero lo he usado para crear nuevas bases de datos de Microsoft Access con PowerShell . / p>

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