579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klickereignis auf eine Schaltfläche zu erhalten. Mein Verbindungszeichenfolge ist:

 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 soll. Mein Betriebssystem ist Windows 7.

13 Stimmen

Nur ein kurzer Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert das 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 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, die 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 Rechner registriert', wie der OP, für beide Excel 16 und Excel 2007-Dateiformate (oledb.16.0 und oledb.12.0 entsprechend). Es macht Sinn, an diesem Punkt Ihre Verluste zu akzeptieren und auf die Microsoft-Software zu verzichten.

8voto

Sharif Lotfi Punkte 479

Tue dies 2 Schritte:

  1. in diesem Menü: Projekt -> Projekt Eigenschaften... -> Build: "Bevorzuge 32-Bit" deaktivieren
  2. in der Verbindungszeichenfolge: setzen Sie Anführungszeichen vor und nach Erweiterten Eigenschaften, wie folgt: Extended Properties='Excel 12.0 Xml;HDR=YES'

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

    adapter.Fill(ds, TableNmae);

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

1 Stimmen

Das Deaktivieren von "32-Bit bevorzugen" schien bei mir zu funktionieren, während Microsoft Access Database Engine 2010 Redistributable installiert war.

1 Stimmen

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

0 Stimmen

Dass das abwählen von "32-Bit bevorzugen" auch für mich funktioniert.

7voto

Albert Zakhia Punkte 99

Wenn Sie ein Webprojekt debuggen, stellen Sie sicher, dass IIS Express je nach den Einstellungen Ihres Projekts entweder in 32 oder 64 Bit läuft.

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 auszuprobieren, nur deine hat es geschafft! Danke

7voto

Ken Johnson Punkte 330

Ich konnte dies beheben, indem ich den Schritten in diesem Artikel gefolgt bin: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine

Der Schlüsselpunkt für mich war folgender:

Beim Debuggen mit IIS,

verwendet Visual Studio standardmäßig die 32-Bit-Version. Du kannst dies ändern, innerhalb von Visual Studio, indem du zu Tools » Optionen » Projekte Und Lösungen » Web-Projekte » Allgemein gehst und wählst

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

Nachdem ich diese Option überprüft hatte, und dann das Zielplattform 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 auf den Wechsel auf 32 Bit, aber dies hilft Ihnen, zu 64 Bit überzugehen.

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 Redistributable', mit der Sie den Anbieter 'Microsoft.ACE.OLEDB.12.0' verwenden können, finden Sie hier: 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 "32-Bit bevorzugen" im Eigenschaften => Build => Allgemeine Konfiguration des Projekts deaktiviert ist Bildbeschreibung hier eingeben

6voto

Shubham Tiwari Punkte 118

Zuerst ü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 auf x64.

Wenn nicht verfügbar, installieren Sie es mit folgendem 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