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 die 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 den folgenden Fehler:

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

Ich habe keinen Schimmer, wie ich das beheben kann. Mein Betriebssystem ist Windows 7.

13 Stimmen

Nur ein kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert die manuelle Installation zusätzlicher Pakete auf Ihrem Zielsystem. (Zugegeben, die Frage wurde 2011 gestellt.) Es ist besser, ClosedXml (verfügbar auf NuGet) zu verwenden, 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 dasselbe 'nicht auf Ihrem lokalen Rechner 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 den Verlust abzuschneiden 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 bei mir 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 es daran liegt, dass ich MS Office 2013 verwende. Vielen Dank, dass Sie mich in die richtige Richtung gewiesen haben.

7 Stimmen

Ich musste den Access-Datenbank-Engine und den 2007 Office System-Treiber: Datenkonnektivitätskomponenten hier installieren microsoft.com/en-us/download/confirmation.aspx?id=23734, damit es funktioniert.

8 Stimmen

Meine Situation, alles funktionierte gut, dann tauchte plötzlich dieser Fehler auf. Also, was könnte passiert sein, um dies 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, 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" unter Eigenschaften des Projekts >> Build >> Allgemeinkonfiguration nicht aktiviert ist.

0 Stimmen

@post_erasmus - Dieser Schritt war für mich DER SCHLÜSSEL, nachdem ich die 64-Bit-DLL installiert hatte. (Möglicherweise musste nicht einmal installiert werden.) Danke!

3 Stimmen

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

114voto

Bernhard Punkte 2281

Je nach der App(32/64 Bit) die die Verbindung nutzt, 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 Laufzeitmotor (32/64) 6

  • überprüfen Sie Ihre Anbieter mit dem Powershell-Befehl sowohl aus 32 als auch 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 Strings 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 bevorstehenden 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 Strings

  • 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

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

0 Stimmen

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

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 mir jedoch zum Laufen. Bereits auf meinem System: Office 2016 Ent, Visual Studio 2017 Ent

12 Stimmen

Das PowerShell-Skript, das angibt, 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 Rechner installieren, um das Problem zu lösen:

    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, dieses Installationspaket 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 das 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 Data Connectivity Components von Office 2007 handelt. Ich bin mir nicht ganz sicher, warum das funktioniert, aber es funktioniert und es hat sich in fast allen Fällen bewährt. Sie müssen die 2007 Office System Driver: Data Connectivity Components installieren, dieses Installationspaket 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 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. Wenn sie unter der x86-Plattform nicht läuft, führen Sie die Schritte im ersten Teil durch und prü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 validiert, dass meine Anwendung lief, als ich unter x86 gebaut habe, dann habe ich den Access Database Engine mit dem passiven Flag installiert.

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

    Nach diesen 2 Schritten konnte ich meine Anwendung nach dem Build 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, folgen Sie daher 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: Extrahieren 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 noch genau, wie viel Ärger ich hatte, als ich versuchte, das 32-Bit-Office zu deinstallieren, und erst nach der Installation des 64-Bit-Office wurde dieses Problem 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, sonst 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

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

0 Stimmen

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

0 Stimmen

Was für eine unglaublich schwierige Sache, dies zum Laufen zu bringen :(, ich frage mich, ob Sie dies in PowerShell skripten und 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