579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klick auf eine Schaltfläche zu erhalten. Mein 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 seitlicher Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und erfordert, wie Sie festgestellt haben, die manuelle Installation zusätzlicher Pakete auf Ihrem Zielrechner. (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-Dateien.

7 Stimmen

Wenn Sie in Sql Server importieren, können Sie diese Abfrage von ssms ausführen: Es wird Ihnen sagen, welche Provider es denkt, 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 dasselbe 'nicht auf Ihrem lokalen Computer registriert' wie der OP, sowohl für Excel 16 als auch für Excel 2007 Dateiformate (oledb.16.0 und oledb.12.0). Es macht Sinn, an diesem Punkt auf die Microsoft-Software zu verzichten.

667voto

Variant Punkte 16951

Na gut, du musst es installieren. Du suchst nach:

61 Stimmen

Ich habe diese Komponenten heruntergeladen und sie haben nicht für mich 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. Danke, dass Sie mich jedoch in die richtige Richtung gewiesen haben.

7 Stimmen

Ich musste den Zugriff auf die Datenbank-Engine und den 2007 Office System Driver: Data Connectivity Components von hier installieren microsoft.com/en-us/download/confirmation.aspx?id=23734, um es zum Laufen zu bringen.

8 Stimmen

Meine Situation, alles hat gut funktioniert, dann plötzlich hat dieser Fehler begonnen. Also, was könnte passiert sein, um das zu verursachen? Kein Code wurde 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 den Download aus der akzeptierten Antwort verwenden, müssen Sie für x86 erstellen, 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 Menü "Eigenschaften" des Projekts >> Build >> Allgemeine Konfiguration deaktiviert ist.

0 Stimmen

@post_erasmus - Dieser Schritt war FÜR MICH DER SCHLÜSSEL, nachdem ich die 64-Bit-DLL installiert hatte. (Vielleicht hätte ich nicht einmal installieren müssen.) Danke!

3 Stimmen

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

114voto

Bernhard Punkte 2281

Je nachdem, welche Anwendung (32/64-Bit) die Verbindung verwendet, können Sie einfach installieren

Zusammenfassung:

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

  • je nach Architektur Ihrer Anwendung wählen Sie den entsprechenden Laufzeitmotor aus (32/64)6

  • Überprüfen Sie Ihre Anbieter mit dem Powershell-Befehl aus beiden 32- und 64-Bit-Shell:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
  • und Sie werden 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 64-Bit-System mit installierten 32-Bit-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"

auch 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

Office 2013 kommt auch mit csi.dll

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

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

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 hat die Version "Microsoft.ACE.OLEDB.16.0"

0 Stimmen

Ich habe diesen Fehler in VS2015 bei der Verwendung von Nuget LinqToExcel bekommen. Es stellte sich heraus, dass ich aufgrund der installierten x64 ACE explizit für x64 (Configuration Manager) bauen musste, anstatt auf Any CPU abzuzielen.

0 Stimmen

Powershell hat gezeigt, dass "Microsoft.ACE.Oledb.12.0" bereits installiert war. Das Installieren des Access-2007-Pakets (auch bekannt als 2007 Office System Driver: Data Connectivity Components) brachte mich schließlich zum Laufen. Bereits auf meinem System vorhanden: Office 2016 Ent, Visual Studio 2017 Ent

12 Stimmen

Der PowerShell-Skript, das informiert, 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 Ihres Problems die folgenden Pakete auf Ihrem Rechner installieren:

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

      Nach Abschluss der Installation versuchen Sie, Ihre Anwendung auszuführen. Wenn dadurch das Problem gelöst wird, umso besser. Andernfalls fahren Sie mit Schritt 2 fort.

    2. Bei diesem nächsten Schritt handelt es sich um einen unerklärten Workaround, der für Office 2010 funktioniert, obwohl es sich um die Data Connectivity Components von Office 2007 handelt. Ich bin nicht ganz sicher, warum dies funktioniert, aber es wurde in fast allen Fällen bewiesen. 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 versuchen Sie, Ihre Anwendung auszuführen. Dadurch sollte das Problem behoben werden.

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

    Ich habe gelesen, dass die MS Access-Treiber, einschließlich des OLEDB Database-Treibers, nur unter der x86-Plattform funktionieren und unter der x64- oder AnyCPU-Plattform inkompatibel sind. Aber das scheint nicht zuzutreffen. Ich habe überprüft, dass meine Anwendung lief, als ich unter x86 erstellt habe, dann habe ich das Access Database Engine unter Verwendung des passiven Flags installiert.

    1. Laden Sie zuerst die Datei lokal herunter. Die Installation finden Sie hier: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Installieren unter Verwendung der Eingabeaufforderung mit dem '/passive'-Flag. Führen Sie in der Eingabeaufforderung folgenden Befehl aus: 'AccessDatabaseEngine_x64.exe /passive'

    Nach diesen 2 Schritten konnte ich meine Anwendung nach dem Build in der x64- oder AnyCPU-Build-Konfiguration ausführen. Dies scheint mein Problem gelöst zu haben.

Hinweis: Die Reihenfolge der Schritte scheint einen Unterschied zu machen, also folgen Sie entsprechend.

6 Stimmen

Ich hatte das Problem, dass ich von einer 32-Bit-Anwendung auf 64-Bit umgestiegen bin 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: Extrahiere die AccessDatabaseEngine_x64.exe in einen Ordner, um die Dateien AceRedist.msi und Data.cab zu erhalten. Öffne die Eingabeaufforderung im Admin-Modus und führe das AceRedist.msi /passive aus.

2 Stimmen

Vielen Dank. Die erste Option hat bei mir funktioniert. Ich erinnere mich, wie viel Ärger ich hatte, als ich versuchte, das 32-Bit-Office zu deinstallieren und erst nach der Installation des 64-Bit-Office wurde das Problem behoben. Aber dieses 64-Bit-Office-Komponente hat stattdessen die Magie vollbracht.

38voto

Shaul Behr Punkte 35201

Ich habe die MS-Treiber installiert und es hat immer noch nicht 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 von diesem Beitrag) als TLDR-Zusammenfassung:

Geben Sie hier eine Bildbeschreibung ein

Geben Sie hier eine Bildbeschreibung ein

0 Stimmen

Ich war dabei, dies als meinen Beitrag zu posten. Das war mein Problem. Ich habe diese IIS-Einstellung gestern geändert, da ein Projekt in meiner Lösung x86-kompiliert war, daher gehe ich davon aus, dass das gesamte Programm als 32-Bit klassifiziert wird.

0 Stimmen

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

0 Stimmen

Was für eine unglaublich schwierige Sache, um zum Laufen zu bringen :(, ich frage mich, ob Sie dies in Powershell skripten könnten und einfach in irgendeine Art von automatisiertem Serversetup-Skript 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