web-dev-qa-db-fra.com

Le fournisseur 'Microsoft.ACE.OLEDB.12.0' n'est pas enregistré sur la machine locale lors de l'exportation des données vers MS ACCESS.

Je suis débutant dans l’utilisation de Microsft.ACE.OLEDB 12.0. Je crée une application Winforms VS 2010.

Et créez une fonction pour exporter les données de la grille de données dans un fichier MS Access. J'utilise Microsoft Oledb

pour exporter les données de la grille de données vers le fichier MS Access. Mais je reçois cette erreur lorsque j'essaie d'exporter 

la

données à MS Access.

S'il vous plaît voir l'image ci-dessous.

enter image description here

Je fais également référence à Bibliothèque d'objets Microsoft.Office 12.0 dans mon application.

enter image description here

Configuration de construction par lots

enter image description here

28
Ragesh S

La référence aux bits Access Interop n'a rien à voir avec votre exception et Access Interop n'est pas nécessaire pour utiliser les classes dans le System.Data.OleDb.

Le problème se pose lorsque votre application est compilée pour AnyCPU Platform, que vous vous exécutez sur un système 64 bits et que le fournisseur ADO.NET installé (Microsoft ACE.OLEDB.12.0) correspond à la version 32 bits.

Lorsque vous utilisez la plate-forme cible AnyCpu, votre code sera exécuté en tant que code 64 bits sur des systèmes 64 bits et en tant que code 32 bits sur des systèmes 32 bits. Une application exécutée en 64 bits ne peut pas utiliser de pilotes 32 bits (et vice-versa). Ajoutez maintenant au mélange le fait que Microsoft.ACE.OLEDB.12.0 a deux versions différentes. Un pour 64 bits et un pour 32 bits et ils ne peuvent pas être installés ensemble sur le même ordinateur. 

La solution de contournement la plus simple consiste à modifier la plate-forme cible de votre application via le menu Visual Studio.

 BUILD -> Configuration Manager -> Active Solution Platform -> x86

Si l'option x86 n'est pas déjà présente, sélectionnez NEW, nommez-la x86, Copy Settings from AnyCPU et cochez Create new project platforms.

Si vous pensez que l'utilisation d'une application 32 bits sur un système d'exploitation 64 bits est une perte de performance ou quelque chose à éviter, réfléchissez-y à deux fois et lisez la mention { cette référence } où les PRO et les CONS de AnyCpu sont examinés de manière critique. Si vous n'avez pas de raison spécifique d'utiliser AnyCpu, il vaut mieux rester avec x86.

Bien sûr, une autre option consiste à désinstaller la version 32 bits et à installer la version 64 bits de ACE à partir d'ici , puis à exécuter votre application en tant que AnyCpu sur des systèmes 64 bits. Mais cela pourrait être un cauchemar pour vos scénarios de déploiement. Que se passe-t-il si la version 32 bits de Microsoft Office est installée sur votre ordinateur cible x64? Office installe sa version compatible ACE de bits et, comme cela a été dit, il n'est pas possible d'installer ACE 32 bits et 64 bits sur le même ordinateur.
Maintenant, vous devriez également demander à votre client de réinstaller Office 64 bits pour que votre application 64 bits soit satisfaite. 

METTRE À JOUR


La situation a un peu changé avec les dernières versions de Visual Studio. Il existe maintenant une nouvelle option qui est la valeur par défaut pour les nouveaux projets. Il s'appelle AnyCPU Prefer 32bit mode. Plus de détails sur ce lien: ce que AnyCPU signifie vraiment de .NET 4.5 et Visual Studio 11 } et un autre article intéressant (bien que concernant SQL Server Compact) est celui-ci Le problème avec Any CPU – Prefer 32 bit – BadImageFormatException

51
Steve

Changez dans les paramètres avancés de son pool d'applications pour permettre l'exécution de programmes 32 bits ... qui l'ont fait pour moi.

9
Freguz

J'ai le même problème lorsque nous lisons un fichier Excel.

Histoire du problème:

Nous avons récemment migré notre application de 32 bits à 64 bits en raison de la mémoire requise. Pour cela, nous avons migré nos fenêtres 7 de 32 bits à 64 bits. Mais toujours nous avons installé le bureau 32 bits sur nos machines.

à cause de cela, nous avons eu ce problème lors de l'importation de données Excel dans l'application.

Solution,

J'ai téléchargé la version 64 bits de http://www.Microsoft.com/en-us/download/details.aspx?id=13255 et je l'ai installé avec l'argument as,

AccessDatabaseEngine_x64.exe/passif

Sans changement de code, mon problème est résolu.

Remarque:

Sous OS 64 bits et Office 64 bits, ma fonctionnalité fonctionnait parfaitement sans ce correctif. Ce correctif n’est requis que lorsque notre application fonctionne en mode 64 bits sur un système d’exploitation 64 bits sur lequel Office 32 bits est installé.

6
Rahul Techie

Voie de base:

Application: MVC C#, Pour Win Server 64 bits:

  1. Supprimez tout le bureau 32 bits installé.

  2. Lien de téléchargement: https://www.Microsoft.com/en-us/download/details.aspx?id=13255

  3. sélectionnez télécharger 64 bits, puis installez-le sur le serveur (si vous ne pouvez pas configurer le programme. Veuillez vérifier à nouveau 1 point).

  4. réessayez d'accéder à votre application. entrez la description de l'image ici

1
Joh

pour moi, l'installation de Microsoft Access Database Engine 2010 Redistributable a résolu le problème, la version 32 bits.