Interrogation des bases de données Jet / des fichiers Excel avec C # sous un système d'exploitation x64

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai donc appris que le fournisseur de données Microsoft.Jet.OLEDB.4.0 permettant d'interroger des sources de données telles que les fichiers Microsoft Access MDB et les feuilles de calcul Excel ne fonctionne pas sous un système d'exploitation Windows 64 bits.

Ce que je suis maintenant censé utiliser pour interroger ces types de fichiers dans les applications .NET 3.5 (C #) afin d'assurer la compatibilité dans les environnements x86 et x64? J'ai parcouru Internet et j'ai n'arrive pas à trouver une réponse claire sur la façon de gérer cette incompatibilité.

J'ai également essayé d'utiliser un fournisseur ODBC et un fournisseur MSDASQL sans succès, car ils semblent avoir les mêmes exceptions que le fournisseur Microsoft.JET.OLEDB.4.0 lorsqu'il est utilisé dans un environnement x64 (sauf si je fais quelque chose de manière flagrante inacceptable avec ces deux autres fournisseurs, même s’ils fonctionnent correctement sous mon environnement Windows XP x86).

J'ai trouvé des personnes disant que je devais utiliser % WINDIR% \ System32 \ odbcad32.exe pour la connectivité ODBC dans les systèmes x64, mais je ne sais pas comment l'utiliser.

Exemple d'exception renvoyé sous x64:

  

************** Texte d'exception ***************   System.InvalidOperationException: le fournisseur 'Microsoft.Jet.OLEDB.4.0' n'est pas enregistré sur la machine locale.      à System.Data.OleDb.OleDbServicesWrapper.GetDataSource (construction OleDbConnectionString, DataSourceWrapper & datas; csraCWrapper)      à System.Data.OleDb.OleDbConnectionInternal..ctor (construction OleDbConnectionString, connexion OleDbConnection)      sur System.Data.OleDb.OleDbConnectionFactory.CreateConnection (options DbConnectionOptions, Object poolGroupProviderInfo, pool DbConnectionPool, DbConnection owningObject)

Était-ce utile?

La solution

Tout ce que j'ai vu dans mes propres recherches récentes confirme ce que vous constatez, à savoir qu'il n'y a tout simplement pas de pilote Jet 64 bits. De plus, j'ai trouvé une publication sur CE " qui semble confirmer que MSDASQL 64 bits n’aidera pas car il s’agit en réalité d’un wrapper (voir le dernier message du 8 mai de Ricky Wen). Votre seule option est de vous connecter via un proxy 32 bits, peut-être un autre serveur SQL 32 bits. Je peux finir par le faire moi-même, jusqu'à ce que je puisse déplacer les données Jet en SQL.

Autres conseils

Ce qui se passe ici, c’est qu’un assemblage x64 tente d’appeler un composant COM x86. L'application x64 ne verra pas les enregistrements COM dans le registre primaire x64, car ils sont dans la ruche wow6432node.

La solution la plus simple consiste à créer l'application avec une plate-forme cible x86 et à la laisser s'exécuter ultérieurement sur le WOW sur votre ordinateur x64. L'application fonctionnera en 32 bits et pourra voir les objets COM 32 bits dont elle a besoin.

Il existe maintenant un pilote ODBC 64 bits pour JetSQL. Il s'agit du moteur de base de données Microsoft Access 2010 redistribuable . Je ne l'ai pas utilisé pour OLEDB, mais pour créer de nouvelles bases de données Microsoft Access avec PowerShell . / p>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top