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.

8voto

Sharif Lotfi Punkte 479

Mach diese 2 Schritte:

  1. in diesem Menü: Projekt -> Projekteigenschaften... -> Build : "32-Bit bevorzugen" abwählen
  2. im ConnectionString: Setze Anführungszeichen vor und nach Extended Properties, wie folgt: Extended Properties='Excel 12.0 Xml;HDR=YES'

    var fileName = string.Format("{0}", openFileDialog1.FileName); var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName); var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); var ds = new DataSet();

    adapter.Fill(ds, TableNmae);

    DataTable data = ds.Tables[TableNmae]; dg1.DataSource = data;

1 Stimmen

Durch das Deaktivieren von "32-Bit bevorzugen" konnte ich feststellen, dass dies funktioniert, während Microsoft Access Database Engine 2010 Redistributable installiert ist.

1 Stimmen

Das Deaktivieren von "Bevorzuge 32-Bit" funktioniert für mich. Danke.

0 Stimmen

Die Option „Prefer 32-Bit“ abwählen funktioniert auch bei mir.

7voto

Albert Zakhia Punkte 99

Wenn Sie ein Webprojekt debuggen, stellen Sie sicher, dass IIS Express ausgeführt wird, entweder in 32 oder 64 Bit, abhängig von Ihren Projekteinstellungen.

Gehen Sie zu

Tools > Optionen > Projekte und Lösungen > Webprojekte

und überprüfen Sie (oder deaktivieren Sie) dort die Option '64-Bit-Version von IIS Express verwenden...'

1 Stimmen

Wow, viele Stunden damit verbracht, andere Lösungen zu versuchen, nur Ihre hat es behoben! Danke

7voto

Ken Johnson Punkte 330

Ich konnte das Problem durch Befolgen der Schritte in diesem Artikel beheben: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine

Der entscheidende Punkt für mich war:

Beim Debuggen mit IIS,

verwendet Visual Studio standardmäßig die 32-Bit-Version. Dies kann geändert werden, indem man innerhalb von Visual Studio zu Tools » Optionen » Projekte und Lösungen » Webprojekte » Allgemein geht und

"Verwende die 64-Bit-Version von IIS Express für Webseiten und Projekte"

Nachdem ich diese Option überprüft hatte, und dann das Zielsystem meiner Projekt wieder auf "Any CPU" gesetzt hatte (ich hatte es irgendwo im Fehlerbehebungsprozess auf x86 gesetzt), konnte ich den Fehler überwinden.

1 Stimmen

Vielen Dank, die meisten anderen Antworten beziehen sich darauf, auf 32 Bit herunterzugehen, aber dies hilft Ihnen dabei, auf 64 Bit voranzukommen.

0 Stimmen

Vielen Dank, das ist genau das, wonach ich suche.

7voto

Harminder Singh Punkte 153

Eine 64-Bit-Version des 'Microsoft Access Database Engine 2010-Verteilungspakets', das es 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 VS 2012 oder neuer verwenden, stellen Sie sicher, dass das Kontrollkästchen "Vorzug für 32-Bit" im Projekt unter Eigenschaften => Build => Allgemeine Konfiguration nicht ausgewählt ist enter image description here

6voto

Shubham Tiwari Punkte 118

Erst überprüfen Sie, welche Version von microsoft.ace.oledb.12.0 auf Ihrem System installiert ist.

Überprüfen Sie im folgenden Pfad C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 Bit ist installiert

Überprüfen Sie im folgenden Pfad C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 Bit ist installiert

Wenn (x86) installiert ist, ändern Sie mit dem Konfigurationsmanager die Lösungsplattform in x86, für x64 ändern Sie in x64.

Wenn nicht verfügbar, installieren Sie über den folgenden Link

https://www.microsoft.com/en-us/download/details.aspx?id=23734

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