579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klick auf eine 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 den 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 tangentiales Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist eine veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert sie die manuelle Installation zusätzlicher Pakete 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 Daten 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 Ihrer Meinung nach gibt. 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, erhielt ich die gleiche Fehlermeldung 'nicht auf Ihrem lokalen Computer registriert' wie der OP, für beide Excel 16 und Excel 2007 Dateiformate (oledb.16.0 und oledb.12.0 jeweils). Es ergibt Sinn, an diesem Punkt die Verluste zu akzeptieren und auf die Microsoft-Software zu verzichten.

667voto

Variant Punkte 16951

Nun müssen Sie es installieren. Sie suchen 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 sicher, dass liegt daran, dass ich MS Office 2013 verwende. Danke, dass du mich in die richtige Richtung gewiesen hast.

7 Stimmen

Ich musste den Access-Datenbankmodul und den 2007 Office System Treiber: Datenverbindungskomponenten hier installieren, 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, die es Ihnen ermöglicht, den 'Microsoft.ACE.OLEDB.12.0'-Anbieter zu verwenden. 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 entwickeln, wie von @backtestbroker.com angegeben.

23 Stimmen

Wenn Sie VS 2012 verwenden, stellen Sie außerdem sicher, dass das Kontrollkästchen "Bevorzugt 32-Bit" im Eigenschaftenfenster des Projekts unter "Build" und dann "Allgemein" 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 habe und die 'Plattformziel' in den Eigenschaften >> Erstellen >> Allgemeine Konfiguration meiner Anwendung auf x64 gesetzt habe. Sortiert, danke!

114voto

Bernhard Punkte 2281

Je nach verwendeter App (32/64-Bit) über die Verbindung können Sie einfach installieren

Zusammenfassung:

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

  • Abhängig von der Architektur Ihrer Anwendung wählen Sie den entsprechenden Runtimemotor (32/64)6

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

    (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 Strings können mit http://live.sysinternals.com/strings.exe gefunden werden

Zum Beispiel 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 in dem 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

werden Sie die Strings finden

  • 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

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

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

0 Stimmen

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

0 Stimmen

Powershell zeigte an, dass "Microsoft.ACE.Oledb.12.0" bereits installiert war. Die Installation des Access 2007-Pakets (auch bekannt als 2007 Office System Driver: Data Connectivity Components) brachte mich jedoch weiter. Bereits auf meinem System: Office 2016 Enterprise, Visual Studio 2017 Enterprise

12 Stimmen

Das PowerShell-Skript, das darüber informiert, 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 die folgenden Pakete auf Ihrem Computer installieren, um Ihr Problem zu lösen:

    1. Um den 'Microsoft.ACE.OLEDB.12.0'-Anbieter 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 .

      Nach Abschluss der Installation versuchen Sie, Ihre Anwendung auszuführen. Wenn dies das Problem löst, großartig, wenn nicht, 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 Data Connectivity-Komponenten von Office 2007 handelt. Ich bin mir nicht ganz sicher, warum dies funktioniert, aber es funktioniert und hat sich in fast allen Fällen bewährt. 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, dies sollte das Problem lösen.

  • Wenn Sie versuchen, eine Anwendung auf einer x64- oder AnyCPU-Plattform erstellt haben, würde ich empfehlen, zunächst zu überprüfen, ob sie unter der x86-Plattform wie erwartet läuft. Falls sie unter dieser 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 laufen und unter der x64- oder AnyCPU-Plattform inkompatibel sind. Aber das scheint nicht wahr zu sein. Ich habe überprüft, dass meine Anwendung lief, als ich unter x86 baute, dann habe ich den Access Database Engine unter Verwendung des passiven Flags 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. Installation unter Verwendung der Eingabeaufforderung mit 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 Bauen in der x64- oder AnyCPU-Build-Konfiguration ausführen. Dies schien mein Problem gelöst zu haben.

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

6 Stimmen

Ich hatte das Problem, dass ich von einer 32-Bit-Anwendung auf 64-Bit umgestellt habe und es lief nicht mehr. 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 AceRedist.msi und eine Data.cab-Dateien zu erhalten. Öffne das cmd-Fenster 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 daran, wie viel Ärger ich damit 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-Element 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-Post gefunden, der das Problem gelöst hat. Lesen Sie es dort, ansonsten 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 gestern diese IIS-Einstellung geändert, da ein Projekt in meiner Lösung x86-kompiliert war. Deshalb gehe ich davon aus, dass das gesamte Programm als 32-Bit klassifiziert 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 bekommen :(, Ich frage mich, ob Sie dies in Powershell skripten könnten und es einfach in irgendein automatisiertes Server-Setup-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