Le fournisseur 'Microsoft.ACE.OLEDB.12.0' n'est pas enregistré sur la machine locale


442

J'essaie d'obtenir des données à partir d'un fichier Excel sur un événement de clic de bouton. Ma chaîne de connexion est:

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

Lorsque je clique sur le bouton, je reçois l'erreur suivante:

Le fournisseur «Microsoft.ACE.OLEDB.12.0» n'est pas enregistré sur la machine locale.

Je ne sais pas comment résoudre ce problème. Mon système d'exploitation est Windows 7.


5
Juste un commentaire tangentiel: utiliser OLEDB pour lire un fichier Excel est une technologie ancienne, très lente et, comme vous l'avez découvert, nécessite l'installation manuelle de packages supplémentaires sur votre machine cible. (Certes, la question a été posée en 2011.) Utilisez plutôt ClosedXml (disponible sur NuGet) qui fonctionne dès la sortie de la boîte.
Shaul Behr du

3
@ShaulBehr Cela aurait été bien, mais ClosedXml ne fonctionne que pour les fichiers .xlsx, pas .xls
Jimmy

2
Si vous importez dans Sql Server, vous pouvez exécuter cette requête à partir de ssms: execute master.dbo.xp_enum_oledb_providers Il vous indiquera quels fournisseurs il pense avoir. Il me vieillissait j'avais à la fois Microsoft.ACE.OLEDB.16.0 et Microsoft.ACE.OLEDB.12.0, mais quand j'ai essayé d'importer des données, j'ai obtenu le même `` non enregistré sur votre machine locale '' que l'OP, pour Excel 16 et les formats de fichiers Excel 2007 (oledb.16.0 et oledb.12.0 respectivement). Il est logique de réduire vos pertes et d'abandonner le logiciel Microsoft à ce stade.
user1040323

1
@ user1040323, execute master.dbo.xp_enum_oledb_providersvous indique ce qui se trouve sur le serveur et non sur votre machine locale .
Nathan Goings

1
Voici celui qui devrait fonctionner; - C'est: Pas vraiment documenté, mais j'ai trouvé un moyen d'installer les versions 32 bits et 64 bits. Ajoutez simplement l'argument de ligne de commande "/ passif" à la commande: "C: \ répertoire chemin \ AccessDatabaseEngine_x64.exe" / passif
TaW

Réponses:


533

Eh bien, vous devez l'installer. Vous cherchez:


44
J'ai téléchargé ces composants et ils ne fonctionnaient pas pour moi, j'ai dû télécharger le moteur de base de données Microsoft Access 2010 redistribuable à partir d'ici: microsoft.com/en-in/download/details.aspx?id=13255 Je suis sûr que c'est parce que je utilise MS Office 2013. Merci de m'avoir indiqué dans la bonne direction.
Sizons

5
J'ai dû installer le moteur de base de données d'accès et le pilote Office System 2007: composants de connectivité des données ici microsoft.com/en-us/download/confirmation.aspx?id=23734 pour le faire fonctionner.
Chris

6
Ma situation, tout fonctionnait bien, puis tout à coup, il a commencé à obtenir cette erreur. Alors, qu'est-ce qui aurait pu arriver pour causer cela? Aucun code changé.
eetawil

21
Dans mon cas, j'ai dû passer de "Any CPU" à x64 pour correspondre à mon architecture.
Rob Sedgwick

2
Jack l'Éventreur fait référence à la solution fournie dans la réponse elle-même, pas aux commentaires. L'installation du a 2007 Office System Driver: Data Connectivity Componentsrésolu le problème immédiatement.
silkfire

156

Une version 64 bits du «Microsoft Access Database Engine 2010 Redistributable» qui vous permettra d'utiliser le fournisseur «Microsoft.ACE.OLEDB.12.0» est disponible ici:
http://www.microsoft.com/en-us/ download / details.aspx? id = 13255

Si vous utilisez le téléchargement à partir de la réponse acceptée, vous devrez créer pour x86, comme indiqué par @ backtestbroker.com.


18
Si vous utilisez VS 2012, assurez-vous également que la case "Préférer 32 bits" n'est pas cochée dans Propriétés >> Générer >> Configuration générale du projet.
devstruck

3
J'utilise VS 2008 (ne demandez pas) et cette solution n'a pas fonctionné jusqu'à ce que je lise l'astuce de post_erasmus et que je définisse «Platform Target» sur x64 dans Propriétés >> Build >> Configuration générale de mon application. Trié, merci!
Ressource

1
Le lien dans cette réponse vous permet également de télécharger et d'installer une version 32 bits. Même si j'ai Windows 7 64 bits, IIS Express de Visual Studio 2013 s'exécute en mode 32 bits par défaut, et j'avais déjà certains composants Office 2013 installés en 32 bits, donc l'installation 32 bits est ce dont j'avais besoin.
Eric Barr

2
Avec cette réponse, je dois également définir «Activer les applications 32 bits» sur le pool d'applications sur Faux.
iowatiger08

1
Cela a aidé à résoudre mon problème. Mon application VS 2019 est compilée à l'aide de n'importe quel processeur, ce qui donne une bibliothèque x64. J'ai installé la version 32 bits d'Office 2013, ce qui m'a empêché d'installer le moteur x64 Access DB Engine. Après avoir installé la version x64 d'Office, j'ai ensuite pu installer le moteur x64 et maintenant tout fonctionne. L'enfer DLL vit toujours.
Mike Lowery

74

en fonction de l'application (32 / 64bit) en utilisant la connexion que vous pouvez simplement installer

Sommaire:

  • tous les bureaux de 2007 à 2016 contiennent le fournisseur "Microsoft.ACE.Oledb.12.0"
  • selon l'architecture de votre application, choisissez le moteur d'exécution approprié (32/64) 6
  • vérifiez vos fournisseurs avec la commande powershell du shell 32 et 64 bits :

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
  • et vous verrez quel fournisseur votre système peut utiliser

la longue histoire: les chaînes peuvent être trouvées avec http://live.sysinternals.com/strings.exe

par exemple. sur un système 64 bits avec des pilotes 32 bits installés

strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"

même dans le prochain bureau 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL

vous trouverez les cordes

  • Microsoft.ACE.OLEDB

  • Microsoft.ACE.Oledb.12.0

Office 2013 est également livré avec csi.dll

c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll

qui contient le " Microsoft.ACE.OLEDB.15.0 "

et Office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll

qui a la version " Microsoft.ACE.OLEDB.16.0 "


J'ai eu cette erreur dans VS2015 en utilisant Nuget LinqToExcel. Il s'avère que, comme j'avais installé l'ACE x64, j'ai dû explicitement construire pour x64 (Configuration Manager), au lieu de cibler n'importe quel processeur.
subsci

Powershell a montré que "Microsoft.ACE.Oledb.12.0" était déjà installé. Cependant, l'installation du package Access 2007 (aka 2007 Office System Driver: Data Connectivity Components ) m'a permis de démarrer. Déjà sur mon système: Office 2016 Ent, Visual Studio 2017 Ent
SushiGuy

6
Le script PowerShell qui indique quelle version est installée est génial! Merci @Bernhard
Rob Bowman

bit offtopic mais cette simple PowerShell est pour vos pilotes ODBC:Get-OdbcDriver | select Name,Platform
Bernhard

Cela a résolu le problème pour moi sur une machine serveur 64 bits en téléchargeant le runtime 32-BIT Access 2016. Fondamentalement, commencez par 32 bits pour être du bon côté (de mauvaises choses se produisent lorsque vous essayez de passer les choses à 64 bits dans le projet).
Eric Mutta

45

La première chose que vous devez vérifier est la configuration de votre application.

  • Si vous avez construit votre projet sous la plate - forme x86 , afin de résoudre votre problème, vous devez installer les packages suivants sur votre machine:

    1. Pour utiliser le fournisseur «Microsoft.ACE.OLEDB.12.0», vous devez d'abord installer le moteur de base de données Microsoft Access 2010 redistribuable , cette installation est disponible à l' adresse : http://www.microsoft.com/download/en/details.aspx ? id = 13255 .

      Une fois l'installation terminée, essayez d'exécuter votre application.Si cela résout le problème, sinon, passez à l'étape 2.

    2. Cette prochaine étape est une solution de contournement inexpliquée, qui fonctionne pour Office 2010, même s'il s'agit des composants de connectivité de données d'Office 2007. Je ne sais pas très bien pourquoi cela fonctionne, mais c'est le cas et il a été prouvé que cela fonctionne dans presque tous les cas. Vous devez installer le pilote Office System 2007: composants de connectivité des données , cette installation est disponible à l' adresse : http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .

      Une fois cette installation terminée, essayez d'exécuter votre application, cela devrait résoudre le problème.

  • Si vous essayez d'exécuter une application construite sous la plate - forme x64 ou AnyCPU , je recommanderais d'abord de valider qu'elle s'exécute comme prévu sous la plate-forme x86. Dans le cas où il ne s'exécute pas sous cette plate-forme x86, effectuez les étapes de la première partie et validez qu'il s'exécute comme prévu.

    J'ai lu que les pilotes MS Access, y compris le pilote de base de données OLEDB, ne fonctionnent que sous la plate-forme x86 et sont incompatibles sous la plate-forme x64 ou AnyCPU. Mais cela semble être faux. J'ai validé que mon application était en cours d'exécution lors de la construction de x86, puis j'ai installé le moteur de base de données Access à l'aide de l'indicateur passif.

    1. Téléchargez d'abord le fichier localement Vous pouvez télécharger l'installation ici: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Installation à l'aide de l'invite de commande avec l'indicateur «/ passif». Dans l'invite de commandes, exécutez la commande suivante: 'AccessDatabaseEngine_x64.exe / passive'

    Après ces 2 étapes, j'ai réussi à exécuter mon application après la construction en configuration x64 ou AnyCPU. Cela a semblé résoudre mon problème.

Remarque: L'ordre des étapes semble faire une différence, veuillez donc suivre en conséquence.


5
J'ai eu le problème que je passais d'une application 32 bits à 64 bits et qu'elle ne fonctionnait plus. La deuxième partie de vos instructions fonctionne parfaitement! L' indicateur / passif permet l'installation même avec un Microsoft Office 32 bits.
Freddy

1
Conseil: Extrayez AccessDatabaseEngine_x64.exe dans un dossier pour obtenir les fichiers AceRedist.msi et Data.cab. Ouvrez l'invite cmd en mode Admin et exécutez le AceRedist.msi /passive.
Jeremy Thompson

1
Merci beaucoup. La première option a fonctionné pour moi. Je me souviens des tracas auxquels j'étais confronté pour désinstaller Office 32 bits et ce n'est qu'après l'installation de 64 bits que ce problème a été résolu plus tôt. Mais ce composant de bureau 64 bits a plutôt fait la magie.
Biki

En raison de 2 points que j'ai corrigés. Merci beaucoup. J'ai besoin d'installer celui-ci microsoft.com/download/en/confirmation.aspx?id=23734 .
SENA

33

J'ai obtenu cette erreur / exception dans Visual Studio 2010 lorsque j'ai modifié ma version dans la boîte de dialogue Configuration Manager de «x86» en «Any CPU». Je comprends que ce pilote de base de données OLEDB ne fonctionne qu'en x86 et n'est pas compatible 64 bits. Changer la configuration de build en x86 a résolu le problème pour moi.


5
L'OLEDB est compatible avec x64. Il peut fonctionner sous N'IMPORTE QUELLE plate-forme, PAS SEULEMENT x86, mais aussi comme N'importe quel CPU. Voir la réponse complète ci-dessous: stackoverflow.com/a/32760211/3637582
Merav Kochavi

Sous le débogage de l'application dans Visual Studio, il est en fait utile de choisir x86 au lieu de n'importe quel CPU / x64 dans le gestionnaire de configuration.
iknownothing

25

J'ai installé les pilotes MS et cela ne fonctionnait toujours pas pour moi. Ensuite, j'ai trouvé ce billet de blog qui a résolu le problème. Lisez-le ici, sinon utilisez ces deux images (liées à ce post) comme résumé TLDR:

entrez la description de l'image ici

entrez la description de l'image ici


Était sur le point de poster ceci comme ma contribution. C'était mon problème. Je changerais ce paramètre IIS hier car un projet dans ma solution a été compilé x86, donc je suppose qu'il classera l'ensemble du programme en 32 bits.
Lee

Mon serveur exécute @ 64bits mais les composants MS Office installés sont 32bits. Cela a résolu mon problème. Je vous remercie.
MarceloBarbosa

Quelle chose incroyablement difficile à faire fonctionner :(, je me demande si vous pourriez écrire ceci dans PowerShell et l'intégrer simplement dans une sorte de script de configuration de serveur automatisé?
David Rogers

@DavidRogers probablement, mais je ne suis pas un expert en PS, alors ne comptez pas sur moi pour ça! ;-)
Shaul Behr

@ShaulBehr J'espère que cela donne un aperçu aux autres. La commande spécifique que j'ai utilisée était (dans une fenêtre powershell / cmd élevée): "C: \ Windows \ System32 \ inetsrv \ ./ appcmd set apppool /apppool.name:YOURAPPPOOLNAMEHERE / enable32BitAppOnWin64: true "
David Rogers

16

Si vous utilisez 64 bits mais que vous rencontrez toujours des problèmes même après avoir installé AccessDatabaseEngine, consultez cet article , cela a résolu le problème pour moi.

c'est-à-dire que vous devez installer ce AccessDatabaseEngine


15

Pour tous ceux qui en sont encore affectés.

J'ai eu l'erreur ...

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."

... comme décrit par le PO, Shailesh Sahu.

J'ai Windows 7 64 bits.

Mon problème se trouve dans les scripts PowerShell , mais j'utilise une chaîne de connexion, similaire à la publication de l'OP, donc j'espère que mes résultats pourront être appliqués à C #, PowerShell et à tout autre langage reposant sur le pilote "Microsoft.ACE.OLEDB".

J'ai suivi les instructions sur ce fil de discussion MS: http://goo.gl/h73RmI

J'ai d'abord essayé d'installer la version 64 bits , puis d'installer la version 32 bits d'AccessDatabaseEngine.exe à partir de cette page http://www.microsoft.com/en-us/download/details.aspx?id=13255

Mais toujours pas de joie.

J'ai ensuite exécuté le code ci-dessous dans PowerShell (sur le site de SQL Panda http://goo.gl/A3Hu96 )

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

... qui m'a donné ce résultat (j'ai supprimé d'autres sources de données par souci de concision) ...

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

Comme vous pouvez le voir, j'ai Microsoft.ACE.OLEDB. 15 .0 (quinze) pas Microsoft.ACE.OLEDB. 12 .0 (douze)

J'ai donc modifié ma chaîne de connexion à 15 et cela a fonctionné.

Donc, un extrait PowerShell rapide pour montrer comment coder en douceur la version ...

$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME

$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"

modifié pour choisir la dernière version ACE, si plusieurs

J'espère que quiconque le trouve peut maintenant vérifier quelle version OLEDB est installée et utiliser le numéro de version approprié.


Bonjour, j'essaie de lire des feuilles Excel avec PowerShell. Fichiers Excel stockés dans une bibliothèque de documents SharePoint et il n'y a pas d'installation Excel sur le serveur. J'ai Windows Server 2008 R2. J'ai installé le pilote système Office: composants de connectivité de données mais lorsque j'exécute votre requête, je ne vois pas Microsoft.ACE.OLEDB. Avez-vous une idée à ce sujet? et une suggestion? Merci d'avance.
doganak

3
J'ai trouvé la réponse. J'avais demandé à notre administrateur système d'installer le moteur de base de données MS Access. Il avait installé la version x86. Lorsque j'ai exécuté à nouveau la requête dans PowerShell x86, j'ai vu ACE.OLEDB.
doganak

Code PowerShell génial. J'avais la version 32 bits (qui n'apparaissait pas dans la liste PowerShell), ce qui m'a empêché d'installer la version 64 bits. Une fois que j'ai supprimé la version 32 bits, j'ai pu installer la version 64 bits sans le message "vous avez déjà des composants Office 32 bits ...". La version 64 bits est apparue dans la liste PowerShell et mon application a commencé à fonctionner.
Doppelganger

13

Bien que de nombreuses réponses aient été données, le problème que j'ai rencontré n'a pas encore été mentionné.

  • Mon scénario: application 64 bits, Win10-64, Office 2007 32 bits installé.
  • L'installation du programme d'installation 32 bits AccessDatabaseEngine.exe téléchargé à partir de MS signale le succès, mais n'est PAS installé, comme vérifié avec le script Powershell de l'une des publications ci-dessus ici.

  • L'installation du programme d'installation 64 bits AccessDatabaseEngine_X64.exe a signalé un message d'erreur choquant:

entrez la description de l'image ici

La solution très simple a été trouvée ici sur un site Autodesk. Ajoutez simplement le paramètre / passif à la chaîne de ligne de commande, comme ceci:

AccessDatabaseEngine_X64.exe / passive

Installation réussie, le pilote OleDb a fonctionné.

Les fichiers Excel que je traite avec OleDb sont de type xlsx, produits avec EPPlus 4.5 et modifiés avec Excel 2007.


1
J'ai pu installer AccessDatabaseEngine_X64.exe de la manière habituelle mais j'ai utilisé un paramètre passif pour installer equilavent 32 bits (AccessDataBaseEngine.exe). Ensuite, j'ai enfin pu me connecter à la base de données Access de Visual Studio 2019.
VolkanOzcan

10

Vous devez changer la plate-forme de solution de "N'importe quel CPU" en "x86" ou "x64" en fonction du nombre d'installation de bureau.

Les étapes sont données ci-dessous:

  1. Cliquez avec le bouton droit sur le fichier de solution dans l'Explorateur de solutions: entrez la description de l'image ici

    1. Cliquez sur Configuration Manager.
    2. Cliquez sur le menu déroulant de la plate-forme active, si x86 est déjà là, sélectionnez-le, sinon cliquez sur Nouveau. entrez la description de l'image ici

    3. Sélectionnez x86 ou x64 dans la liste déroulante de la nouvelle plate-forme: entrez la description de l'image ici

Compilez et exécutez votre application.


6

Si le "AccessDatabaseEngine" installé n'aide toujours pas, voici la solution:

Vous devez changer la plate-forme de solution active de "N'importe quel CPU" en "x86".

Le fournisseur OLEDB n'est pas enregistré sur la machine locale

De CodeProject.com


Vous pouvez l'exécuter sous N'IMPORTE QUELLE plate-forme, PAS SEULEMENT 'x86', mais aussi 'Any CPU' que 'x64'. Voir la réponse complète ci-dessous: stackoverflow.com/a/32760211/3637582
Merav Kochavi

6

J'ai pu résoudre ce problème en suivant les étapes de cet article: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered- sur-la-machine-locale

Le point clé pour moi était le suivant:

Lors du débogage avec IIS,

par défaut, Visual Studio utilise la version 32 bits. Vous pouvez modifier cela à partir de Visual Studio en allant dans Outils »Options» Projets et solutions »Projets Web» Général et en choisissant

"Utilisez la version 64 bits d'IIS Express pour les sites Web et les projets"

Après avoir vérifié cette option, puis redéfini la cible de plate-forme de mon projet sur "N'importe quel processeur" (je l'avais définie sur x86 quelque part dans le processus de dépannage), j'ai pu surmonter l'erreur.


1
Merci, la plupart des autres réponses sont pour descendre à 32 bits, mais cela vous aide à passer à 64 bits.
illinoistim

Merci beaucoup c'est ce que je recherche.
Manoj Kalluri

6

Si vous déboguez un projet Web, assurez-vous simplement qu'IIS Express s'exécute en 32 ou 64 bits en fonction des paramètres de votre projet.

Aller à

Outils> Options> Projets et solutions> Projets Web

et à partir de là, vérifiez (ou décochez) la case "Utiliser la version 64 bits d'IIS Express ..."


1
Wow beaucoup d'heures à essayer d'autres solutions, seul votre solution! merci
Hernaldo Gonzalez

5

Vérifiez d'abord quelle version de microsoft.ace.oledb.12.0 est installée sur votre système.

Archiver sous le chemin C: \ Program Files \ Fichiers communs \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL --64 bits est installé

Archivez sous le chemin C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL - le bit x86 est installé

Si (x86) est installé, alors en utilisant le gestionnaire de configuration, changez la plateforme de solution en x86, pour x64 changez en x64.

Si non disponible, installez en utilisant le lien ci-dessous

https://www.microsoft.com/en-us/download/details.aspx?id=23734


3

syp_dino,

La solution pour moi comme vous l'avez suggéré pour l' erreur "Le fournisseur" Microsoft.ACE.OLEDB.12.0 'n'est pas enregistré sur la machine locale " consiste à remplacer la plate-forme de solution active par" Any CPU "par" x86 ".

Lorsque j'ai effectué ces étapes, reconstruit la solution, saisi l'EXE et placé sur le réseau, tout s'est bien passé sur la machine Windows 7 64 bits.


Vous pouvez l'exécuter sous n'importe quelle plate-forme, PAS SEULEMENT x86, mais aussi en tant que CPU. Voir ma réponse ci-dessous: stackoverflow.com/a/32760211/3637582
Merav Kochavi

3

J'ai eu ce problème lors de la tentative d'importation de données à partir d'un fichier Excel (xlsx) dans une base de données SQL Server à l'aide de SSMS 2014.

L' installation du pilote Office System 2007: composants de connectivité des données a fait l'affaire pour moi.


... et si cela ne fonctionne pas, essayez de choisir une autre "version Excel" dans la liste déroulante de l'écran "choisir la source de données". stackoverflow.com/a/56171883/283895
tgolisch

@Taran Link n'est pas disponible
evry1falls

Cela ressemble au fichier, mais je ne peux pas confirmer download.cnet.com/…
Taran

3

J'ai fait face à ce même problème. Allez dans les propriétés de la solution et changez n'importe quel CPU en x86, je pense qu'il fera le travail.


3

faites ces 2 étapes: 1. dans ce menu: projet -> propriétés de votre projet ... -> Build: décochez "préfère 32 bits" 2. dans connectionString: écrivez des cuotes avant et après les propriétés étendues, comme ceci: Propriétés étendues = ' Excel 12.0 Xml; HDR = OUI '

                var fileName = string.Format("{0}", openFileDialog1.FileName);
            //var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
            var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName);
            var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
            var ds = new DataSet();

            adapter.Fill(ds, TableNmae);

            DataTable data = ds.Tables[TableNmae];
            dg1.DataSource = data;

Décocher "Préférez 32 bits" semblait fonctionner pour moi tout en ayant installé Microsoft Access Database Engine 2010 Redistributable.
IT Delinquent

J'ai décoché 'Prefer 32-Bit' et c'était opérationnel !!!
user1584253

3

Ces configurations ont fonctionné en janvier 2020 sur ma nouvelle version de machine:

(1 - x64 uniquement) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installé avec l'argument / passif, les paramètres de génération VStudio définis explicitement sur x64, avec la chaîne de connexion suivante: Provider = Microsoft.ACE.OLEDB.16.0; Source de données = D: ... \ MyDatabase.accdb

(2 - x64 ou x32) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installé avec l'argument / passif, PLUS AccessDatabaseEngine 2010 (32 bits) installé avec l'argument / passif, les paramètres de génération VStudio définis sur AnyCPU, avec la chaîne de connexion suivante: Provider = Microsoft.ACE.OLEDB.16.0; Source de données = D: ... \ MyDatabase.accdb

(3 - x32 uniquement) Windows 10 x64, Office 365 x32, AccessDatabaseEngine 2010 (32 bits) installé avec l'argument / passif, les paramètres de génération VStudio définis sur x86, avec la chaîne de connexion suivante: Provider = Microsoft.ACE.OLEDB.12.0; Source de données = D: ... \ MyDatabase.accdb

NOTES D'ÉCHEC

L'utilisation du fournisseur ACE.OLEDB.12.0 x64 dans la chaîne de connexion a échoué avec uniquement AccessDatabaseEngine_x64 2016 installé comme ci-dessus dans (1).

L'utilisation d'AnyCPU dans les paramètres de construction de Visual Studio a échoué en (1). Le réglage x64 est requis. C'est peut-être parce que AnyCPU signifie que Vstudio doit voir un fournisseur x32 ACE.OLEDB.nn.0 au moment de la compilation.

Le moteur x32 / passif ACE.OLEDB.12.0 2016 ne s'installera PAS lorsqu'il verra des applications x64 autour. (Le programme d'installation ACE.OLEDB.12.0 2010 x32 / passif a fonctionné.)

CONCLUSIONS

Pour utiliser les paramètres de build x64, vous devez disposer du moteur de base de données x64 2016 ET du fournisseur de chaîne de connexion ACE.OLEDB.16.0 ET des paramètres de build x64 explicites pour fonctionner avec Office 365 en janvier 2020. L'utilisation de l'option / passive facilite les installations. Nous remercions celui qui a publié ce conseil!

Pour utiliser AnyCPU, j'avais besoin d'avoir à la fois le moteur ACE.OLEDB.12.0 2010 x32 et les moteurs ACE.OLEDB.16.0 x64 installés. De cette façon, Vstudio pouvait voir les moteurs x32 et x64 au moment de la compilation "AnyCPU". Je pourrais changer la chaîne de connexion du fournisseur en ACE.OLEDB.12.0 pour un fonctionnement x32 ou en ACE.OLEDB.16.0 pour un fonctionnement x64. Les deux ont bien fonctionné.

Pour utiliser les paramètres de génération x86, vous devez disposer du moteur de base de données 2010 x32 ET du fournisseur de chaînes de connexion ACE.OLEDB.12.0 ET des paramètres de génération x86 explicites pour fonctionner avec Office 365 x32 en janvier 2020.


2

J'ai un problème similaire 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 vers 64 bits. Mais nous avons quand même 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 installé avec l'argument as,

AccessDatabaseEngine_x64.exe / passive

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

Remarque:

Sur un système d'exploitation 64 bits et un bureau 64 bits, ma fonctionnalité fonctionnait correctement sans ce correctif. Ce correctif n'est requis que lorsque notre application fonctionne en 64 bits sur un système d'exploitation 64 bits sur lequel Office 32 bits est installé.


Mais, Microsoft est contre cette solution. Peu de mes clients observent une distorsion dans d'autres programmes Office en raison de ce correctif.
Rahul Techie


1

J'ai suivi les instructions des autres; l'installation de ce correctif, l'installation de ce correctif ainsi que le moteur de base de données Microsoft Access 2010.

Mon problème est que j'utilise la même bibliothèque (linq2sql) sur 2 sites sur ma machine; 1 fonctionne et 1 ne fonctionne pas.

Finalement, j'ai trouvé que je devais "activer les applications 32 bits" dans les paramètres avancés de l'apppool pour mon site non fonctionnel.

Tout fonctionne bien maintenant.


1

peut également essayer ces étapes

Dans SQL Server, 1.Ouvrez une base de données 2.Cliquez dans l'option 'Server Obtect' 3.Cliquez dans 'Linked Servers' 4.Cliquez dans 'Providers' 5.Clic Rigth dans 'Microsoft.ACE.OLEDB.12.0' 6. Décochez toutes les options et fermez


1

N'oubliez pas d'installer AccessDatabaseEngine sur le serveur pour l'application Web.


1

J'ai eu le même problème mais dans ce cas, le fournisseur microsoft-ace-oledb-12-0 était déjà installé sur ma machine et fonctionnait bien pour une autre application développée.

La différence entre ces applications et celle avec laquelle j'ai eu le problème était que les anciennes applications s'exécutaient sur " Local IIS " tandis que celle avec erreur était sur " IIS Express (exécutée à partir de Visual Studio"). Donc ce que j'ai fait était-

  1. Faites un clic droit sur le nom du projet.
  2. Accéder aux propriétés
  3. Accédez à l'onglet Web à droite.
  4. Sous Serveurs, sélectionnez IIS local et cliquez sur le bouton Créer un répertoire virtuel.
  5. Exécutez à nouveau l'application et cela a fonctionné.

1

J'ai eu le moteur de base de données Microsoft Access 2010 Redistributable déjà installé sur ma machine, mais je recevais toujours l' erreur du fournisseur Microsoft ACE OLEDB .

Ensuite, je me suis rappelé que j'avais récemment effectué une mise à niveau vers Office 2016. Je devrais donc essayer de réinstaller le moteur de base de données Microsoft Access 2010 redistribuable . Et cela a résolu le problème sur ma machine.

Donc, si vous avez mis à niveau vers une version différente de MS Office ou même réparé / réinstallé votre MS Office, essayez de réinstaller Microsoft Access Database Engine 2010 Redistributable avant de perdre du temps à trouver d'autres correctifs. Bonne chance!


1

1.) Vérifiez votre chaîne de connexion avec ConnectionStrings.com .

2.) Assurez-vous que le bon moteur de base de données est installé. Ce sont les deux moteurs de base de données qui m'ont aidé.

Moteur de base de données Microsoft Access 2010 redistribuable

Pilote Office System 2007: composants de connectivité des données

3.) Il pourrait y avoir un problème avec votre plate-forme cible de génération étant "N'importe quel CPU", il peut être nécessaire d'être "X86" (Propriétés, Build, Plate-forme cible).


Vous pouvez l'exécuter sous N'IMPORTE QUELLE plate-forme, PAS SEULEMENT 'x86', mais aussi 'Any CPU' que 'x64'. Voir la réponse complète ci-dessous: stackoverflow.com/a/32760211/3637582
Merav Kochavi

Ok, eh bien je ne pense pas que ce soit le cas pour moi ... il vaut donc la peine de mentionner que la plate-forme cible de construction de quelqu'un peut faire partie du problème.
u8it le

1

Si vous obtenez cette erreur lorsque vous essayez d'utiliser ACE à partir d'une application ASP.NET, la cause la plus probable est que vous avez installé l'une des versions 32 bits. Par défaut, IIS sur un système d'exploitation 64 bits exécutera les applications dans un processus de travail 64 bits. Les processus 64 bits ne peuvent pas charger les DLL 32 bits. Lorsqu'un appel est effectué vers le fournisseur ACE, le processus 64 bits tentera de localiser une DLL 64 bits. S'il n'existe pas, vous obtenez le message d'erreur qui vous a amené ici.

Dans ce cas, vous avez deux options. Tout d'abord, vous pouvez installer la version 64 bits 2010. Si la version 32 bits 2007 est installée, vous pouvez simplement installer la version 64 bits 2010 à côté. Si la version 32 bits de 2010 est installée, vous devez la désinstaller et télécharger et installer la version 64 bits 2010 à la place. Vous ne pouvez pas avoir les versions 32 et 64 bits du fournisseur 2010 installées en même temps. Si vous effectuez l'installation sur votre machine de développement, vous pouvez également être contraint par le bit-ness des installations Office existantes.

La deuxième option consiste à modifier le pool d'applications dans IIS pour activer les applications 32 bits. Si vous utilisez la version complète d'IIS, vous pouvez utiliser l'outil de gestion pour cela (Panneau de configuration »Outils d'administration» Gestionnaire des services Internet (IIS)).

Pour plus de compréhension, veuillez consulter le lien ci - dessous


1

J'ai reçu cette erreur lors de l'importation de données d'un fichier Excel dans MS-SQL. Le fournisseur était déjà installé (64 bits) et cela m'a surpris pourquoi cela ne fonctionnait pas. Donc, tout ce que j'ai fait, c'est localiser l'application d'importation / exportation utilisée ici, c'est-à-dire le .EXE. Et je l'ai trouvé à

C: \ Program Files \ Microsoft SQL Server \ 130 \ DTS \ Binn \ DTSWizard.exe

J'ai ensuite exécuté le .exe directement pour effectuer l'importation des données. Et ça a marché!


Hm, j'avais quelques versions là-bas, SSMS doit utiliser la mauvaise.
SteveCav

1

Cela a fonctionné pour moi en ce moment.

  1. Visitez cette page puis téléchargez le package approprié pour votre ordinateur (AccessDatabaseEngine.exe ou AccessDatabaseEngine_X64.exe)
  2. Installez ça.
  3. Enjoye ... Vos codes fonctionnent maintenant ...

Mais pour votre package d'application, vous pouvez utiliser l'une des solutions suivantes:

  1. Allez dans "C: \ Program Files (x86) \ Common Files \ microsoft shared" ou "C: \ Program Files \ Common Files \ Microsoft Shared" et placez le répertoire "OFFICE14" au même emplacement que votre fichier de package.

Ou

  1. Attachez deux projets (dans l'élément1) dans votre package d'installation.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.