579 Stimmen

Der 'Microsoft.ACE.OLEDB.12.0'-Anbieter ist auf der lokalen Maschine nicht registriert.

Ich versuche, Daten aus einer Excel-Datei beim Klicken auf eine Schaltfläche zu erhalten. Meine Verbindungszeichenkette 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 den folgenden Fehler:

Der Anbieter "Microsoft.ACE.OLEDB.12.0" ist nicht auf dem lokalen Computer registriert.

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

13 Stimmen

Nur ein Randbemerkung: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist eine veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert die manuelle Installation von zusätzlichen Paketen 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.

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 sagen, welche Anbieter es denkt, dass Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 hatte, aber als ich versuchte, Daten zu importieren, bekam ich die gleiche "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 jeweils). Es macht Sinn, an diesem Punkt die Verluste zu begrenzen und auf die Microsoft-Software zu verzichten.

667voto

Variant Punkte 16951

Nun, 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 verwende. Danke, dass du mich in die richtige Richtung verwiesen hast.

7 Stimmen

Ich musste den Zugriff auf die Datenbank-Engine und den 2007 Office System-Treiber: Datenverbindungs-Komponenten hier installieren microsoft.com/de-de/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

Es ist eine 64-Bit-Version des 'Microsoft Access Database Engine 2010 Redistributable' verfügbar, mit der Sie den 'Microsoft.ACE.OLEDB.12.0'-Anbieter verwenden können. Sie finden sie hier:
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 kompilieren, wie von @backtestbroker.com angegeben.

23 Stimmen

Wenn Sie VS 2012 verwenden, stellen Sie außerdem sicher, dass das Kontrollkästchen "Bevorzuge 32-Bit" im Projekt unter Eigenschaften >> Build >> Allgemeine Konfiguration nicht aktiviert 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 und 'Platform Target' auf x64 in Eigenschaften >> Erstellen >> Allgemeine Konfiguration meiner Anwendung eingestellt habe. Sortiert, danke!

114voto

Bernhard Punkte 2281

Je nachdem, ob die App (32/64 Bit) die Verbindung verwendet, könnten Sie einfach installieren

Zusammenfassung:

  • alle Büros von 2007-2016 enthalten den Anbieter "Microsoft.ACE.Oledb.12.0"

  • je nach Architektur Ihrer Anwendung wählen Sie den entsprechenden Laufzeit-Engine (32/64)6

  • Überprüfen Sie Ihre Anbieter mit dem PowerShell-Befehl auf beiden 32- und 64-Bit-Systemen:

    (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 finden sich unter http://live.sysinternals.com/strings.exe

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

Das 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

die "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

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

0 Stimmen

Ich erhielt diesen Fehler in VS2015 mit Nuget LinqToExcel. Es stellte sich heraus, dass ich aufgrund der installierten x64 ACE explizit für x64 (Configuration Manager) anstatt für Any CPU erstellen musste.

0 Stimmen

Powershell hat angezeigt, dass "Microsoft.ACE.Oledb.12.0" bereits installiert war. Allerdings hat die Installation des Access 2007-Pakets (auch bekannt als 2007 Office System Treiber: Datenzugriffskomponenten) mir geholfen, weiterzukommen. Bereits auf meinem System vorhanden: Office 2016 Enterprise, Visual Studio 2017 Enterprise

12 Stimmen

Das PowerShell-Skript, das anzeigt, welche Version installiert ist, ist genial! Danke @Bernhard

62voto

Merav Kochavi Punkte 3925

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

  • Wenn Sie Ihr Projekt unter der x86-Plattform erstellt haben, müssen Sie zur Behebung des 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 dies das Problem löst, ist das großartig. Andernfalls fahren Sie mit Schritt 2 fort.

    2. Dieser nächste Schritt ist ein unerklärlicher Workaround, der für Office 2010 funktioniert, obwohl es sich um die Datenkonnektivitätskomponenten von Office 2007 handelt. Ich bin mir nicht ganz sicher, warum das funktioniert, aber es funktioniert und hat sich in fast allen Fällen als wirksam erwiesen. 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 sein.

  • Wenn Sie versuchen, eine Anwendung unter x64- oder AnyCPU-Plattform zu starten, empfehle ich Ihnen zunächst, zu überprüfen, ob sie wie erwartet unter der x86-Plattform 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 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 inkompatibel sind. Aber das scheint nicht wahr zu sein. Ich habe validiert, dass meine Anwendung lief, als ich x86 gebaut habe, dann habe ich den Access Database Engine mit dem passiven Flag installiert.

    1. Laden Sie zuerst 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 dem Befehlsfenster und dem '/passive'-Flag. Führen Sie im Befehlsfenster den folgenden Befehl aus: 'AccessDatabaseEngine_x64.exe /passive'

    Nach diesen 2 Schritten konnte ich meine Anwendung nach dem Erstellen in x64- oder AnyCPU-Build-Konfiguration ausführen. Das schien 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 es 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: Entpacken Sie die AccessDatabaseEngine_x64.exe in einen Ordner, um die AceRedist.msi und Data.cab-Dateien zu erhalten. Öffnen Sie die Eingabeaufforderung im Admin-Modus und führen Sie die AceRedist.msi /passive aus.

2 Stimmen

Vielen Dank. Die erste Option hat für mich funktioniert. Ich erinnere mich daran, wie viel Ärger ich hatte, 32-Bit-Office zu deinstallieren, und erst nach der Installation von 64-Bit-Office wurde dieses Problem früher 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 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 wollte dies gerade als meinen Beitrag posten. Das war mein Problem. Gestern habe ich diese IIS-Einstellung geändert, da ein Projekt in meiner Lösung als x86 kompiliert war, daher gehe ich davon aus, dass das gesamte Programm als 32-Bit eingestuft wird.

0 Stimmen

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

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 es einfach in irgendeine Art von automatisiertem Serverskript 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