579 Stimmen

'Der Provider "Microsoft.ACE.OLEDB.12.0" ist auf dem lokalen Rechner nicht registriert'

Ich versuche, Daten aus einer Excel-Datei bei einem Klick auf die Schaltfläche zu erhalten. Meine Verbindungszeichenfolge lautet:

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

Wenn ich auf die Schaltfläche klicke, erhalte ich folgenden Fehler:

Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist auf dem lokalen Rechner nicht registriert.

Ich habe keine Ahnung, wie ich das beheben kann. Mein Betriebssystem ist Windows 7.

13 Stimmen

Nur ein nebenbei bemerkter Kommentar: die Verwendung von OLEDB zum Lesen einer Excel-Datei ist alte Technik, sehr langsam und erfordert, wie Sie entdeckt haben, die manuelle Installation von zusätzlichen Paketen auf Ihrer Zielmaschine. (Zugegeben, die Frage wurde 2011 gestellt.) Verwenden Sie stattdessen ClosedXml (verfügbar auf NuGet), das sofort einsatzbereit ist.

7 Stimmen

@ShaulBehr Es wäre schön gewesen, aber ClosedXml funktioniert nur für .xlsx-Dateien, nicht für .xls.

7 Stimmen

Wenn Sie in Sql Server importieren, können Sie diese Abfrage von SSMS ausführen: execute master.dbo.xp_enum_oledb_providers Es wird Ihnen mitteilen, welche Anbieter es glaubt, dass Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 habe, aber als ich versuchte, Daten zu importieren, bekam ich die gleiche 'nicht auf Ihrem lokalen Rechner registriert'-Fehlermeldung wie der OP, für beide Excel 16 und Excel 2007 Dateiformate (OlEDB.16.0 und OlEDB.12.0 jeweils). Es macht Sinn, an diesem Punkt Ihre Verluste zu begrenzen und sich von der Microsoft-Software zu verabschieden.

667voto

Variant Punkte 16951

Nun, du musst es installieren. Du suchst nach:

61 Stimmen

Ich habe diese Komponenten heruntergeladen und sie haben nicht funktioniert, ich musste das Microsoft Access Database Engine 2010 Redistributable von hier herunterladen: microsoft.com/en-in/download/details.aspx?id=13255 Ich bin mir sicher, dass das daran liegt, dass ich MS Office 2013 benutze. Vielen Dank, dass du mich in die richtige Richtung gelenkt hast.

7 Stimmen

Ich musste den Access-Datenbank-Engine und den 2007 Office System Treiber: Datenkonnektivitätskomponenten hier installieren microsoft.com/de-de/download/confirmation.aspx?id=23734, um es zum Laufen zu bringen.

8 Stimmen

Meine Situation, alles hat einwandfrei funktioniert, dann plötzlich begann dieser Fehler aufzutreten. Also, was könnte passiert sein, um dies zu verursachen? Es wurde kein Code geändert.

203voto

rsbarro Punkte 26319

Eine 64-Bit-Version des "Microsoft Access Database Engine 2010 Redistributable", die es Ihnen ermöglicht, den Anbieter "Microsoft.ACE.OLEDB.12.0" zu verwenden, ist hier verfügbar:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

Wenn Sie das Download aus der akzeptierten Antwort verwenden, müssen Sie für x86 kompilieren, wie von @backtestbroker.com erwähnt.

23 Stimmen

Wenn Sie VS 2012 verwenden, stellen Sie außerdem sicher, dass das Kontrollkästchen "32-Bit bevorzugen" im Abschnitt Eigenschaften >> Erstellen >> Allgemeine Konfiguration des Projekts nicht aktiviert ist.

0 Stimmen

@post_erasmus - Dieser Schritt war DER SCHLÜSSEL für mich nach der Installation der 64-Bit-DLL. (Möglicherweise war die Installation gar nicht erforderlich.) Vielen Dank!

3 Stimmen

Ich benutze VS 2008 (frag nicht) und diese Lösung hat erst funktioniert, nachdem ich den Tipp von post_erasmus gelesen und die 'Plattformziel' in Eigenschaften >> Erstellen >> Allgemeine Konfiguration meiner Anwendung auf x64 gesetzt habe. Sortiert, danke!

114voto

Bernhard Punkte 2281

Je nach der App(32/64bit), die die Verbindung nutzt, können Sie einfach installieren

Zusammenfassung:

  • alle Office-Versionen von 2007-2016 enthalten den Anbieter "Microsoft.ACE.Oledb.12.0"

  • abhängig von der Architektur Ihrer Anwendung wählen Sie die entsprechende Laufzeitumgebung (32/64bit)6

  • überprüfen Sie Ihre Anbieter mit dem PowerShell-Befehl aus beiden 32 und 64bit Shell:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
  • und Sie sehen, welchen Anbieter Ihr System verwenden kann

die lange Geschichte: die Zeichenfolgen können mit http://live.sysinternals.com/strings.exe gefunden werden

z.B. auf einem 64bit-System mit installierten 32bit-Treibern

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"

sogar im kommenden Office 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

finden Sie die Zeichenfolgen

  • Microsoft.ACE.OLEDB

  • Microsoft.ACE.Oledb.12.0

das Office 2013 enthält auch csi.dll

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

welches "Microsoft.ACE.OLEDB.15.0" enthält

und 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

das die Version "Microsoft.ACE.OLEDB.16.0" hat

0 Stimmen

Ich habe diesen Fehler in VS2015 bei der Verwendung von Nuget LinqToExcel erhalten. Es stellte sich heraus, dass ich aufgrund der installierten x64 ACE x64 explizit erstellen musste (Konfigurations-Manager) anstelle von Any CPU zu zielen.

0 Stimmen

Powershell zeigte, dass "Microsoft.ACE.Oledb.12.0" bereits installiert war. Die Installation des Access 2007-Pakets (auch bekannt als 2007 Office System Treiber: Datenverbindungskomponenten) brachte mich wieder zum Laufen. Bereits auf meinem System: Office 2016 Ent, Visual Studio 2017 Ent

12 Stimmen

Der PowerShell-Befehl, der angibt, welche Version installiert ist, ist genial! Danke @Bernhard

62voto

Merav Kochavi Punkte 3925

Das Erste, was Sie überprüfen müssen, ist die Build-Konfiguration Ihrer Anwendung.

  • Wenn Sie Ihr Projekt unter der x86-Plattform erstellt haben, sollten Sie zur Lösung des Problems die folgenden Pakete auf Ihrem Computer installieren:

    1. Um den Anbieter 'Microsoft.ACE.OLEDB.12.0' verwenden zu können, müssen Sie zunächst das 'Microsoft Access Database Engine 2010 Redistributable' installieren. Diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/details.aspx?id=13255.

      Versuchen Sie nach Abschluss der Installation, Ihre Anwendung auszuführen. Wenn dies das Problem löst, ist das großartig. Andernfalls fahren Sie mit Schritt 2 fort.

    2. Der nächste Schritt ist ein unerklärlicher Workaround, der für Office 2010 funktioniert, obwohl es sich um die Data Connectivity Components von Office 2007 handelt. Ich bin mir nicht ganz sicher, warum das funktioniert, aber es wurde in fast allen Fällen nachgewiesen. Sie müssen die '2007 Office System Driver: Data Connectivity Components' installieren. Diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/confirmation.aspx?id=23734.

      Nach Abschluss dieser Installation sollten Sie Ihre Anwendung ausführen können, und damit sollte das Problem gelöst sein.

  • Wenn Sie versuchen, eine Anwendung unter der x64- oder AnyCPU-Plattform auszuführen, empfehle ich Ihnen zunächst zu überprüfen, ob sie wie erwartet unter der x86-Plattform läuft. Sollte sie unter dieser x86-Plattform nicht laufen, führen Sie die Schritte im ersten Teil aus und überprüfen Sie, ob sie wie erwartet läuft.

    Ich habe gelesen, dass die MS Access-Treiber einschließlich des OLEDB-Datenbanktreibers nur unter der x86-Plattform funktionieren und unter der x64- oder AnyCPU-Plattform nicht kompatibel sind. Aber das scheint nicht wahr zu sein. Ich habe meine Anwendung erfolgreich ausgeführt, als ich unter x86 gebaut habe, und dann habe ich den Access Database Engine mit dem passiven Flag installiert.

    1. Laden Sie zunächst die Datei lokal herunter. Sie können die Installation hier herunterladen: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Installieren Sie mit der Eingabeaufforderung und dem '/passive'-Flag. Führen Sie in der Eingabeaufforderung den folgenden Befehl aus: 'AccessDatabaseEngine_x64.exe /passive'

    Nach diesen 2 Schritten konnte ich meine Anwendung nach dem Erstellen in der x64- oder AnyCPU-Build-Konfiguration ausführen. Das hat mein Problem gelöst.

Hinweis: Die Reihenfolge der Schritte scheint eine Rolle zu spielen. Befolgen Sie bitte entsprechend.

6 Stimmen

Ich hatte das Problem, dass ich von einer 32-Bit-Anwendung auf 64-Bit umgestellt habe und sie nicht mehr lief. Der zweite Teil Ihrer Anweisungen funktioniert perfekt! Die /passive-Flagge ermöglicht die Installation auch mit einem 32-Bit-Microsoft Office.

4 Stimmen

Tipp: Extrahieren Sie die AccessDatabaseEngine_x64.exe in einen Ordner, um die AceRedist.msi und eine Data.cab Dateien zu erhalten. Öffnen Sie die Eingabeaufforderung im Admin-Modus und führen Sie das AceRedist.msi /passive aus.

2 Stimmen

Vielen Dank. Die erste Option hat für mich funktioniert. Ich erinnere mich, wie viele Probleme ich hatte, um Office 32-Bit zu deinstallieren, und erst nach der Installation von Office 64-Bit wurde dieses Problem früher behoben. Aber dieses 64-Bit-Office-Komponente hat stattdessen die Magie bewirkt.

38voto

Shaul Behr Punkte 35201

Ich habe die MS-Treiber installiert und es hat immer noch nicht für mich funktioniert. Dann habe ich diesen Blog-Beitrag gefunden, der das Problem gelöst hat. Lesen Sie es dort, oder verwenden Sie diese beiden Bilder (verlinkt aus diesem Beitrag) als TLDR-Zusammenfassung:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

0 Stimmen

Ich war kurz davor, dies als meinen Beitrag zu veröffentlichen. Das war mein Problem. Ich hatte diese IIS-Einstellung gestern geändert, da ein Projekt in meiner Lösung x86-kompiliert war, also gehe ich davon aus, dass das gesamte Programm als 32-Bit-Klasse eingestuft wird.

0 Stimmen

Mein Server läuft @64bits, aber die installierten MS Office Komponenten sind 32bits. Dies hat mein Problem gelöst. Vielen Dank.

0 Stimmen

Was für eine unglaublich schwierige Sache, das zum Laufen zu bringen :(, ich frage mich, ob Sie dies in PowerShell skripten könnten und einfach in irgendeine Art von automatisiertem Server-Einrichtungsskript integrieren könnten?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X