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.

0voto

Darpan Gupta Punkte 181

Fügen Sie einfach den CsvReader aus dem Nuget-Paket-Manager hinzu. Es ist schnell und einfach und es gibt keine Kopfschmerzen, Verbindungen herzustellen wie hier. Suchen Sie einfach mit dem Nuget-Paket-Manager und importieren Sie die Bibliothek:-

using LumenWorks.Framework.IO.Csv;

Code:

var csvTable = new DataTable();   
using (var csvReader = new CsvReader(new         
StreamReader(System.IO.File.OpenRead(filePath)), true))   
{   
   csvTable.Load(csvReader);   
   string Column1 = csvTable.Columns[0].ToString(); //Lesen von Spalten    
}

0voto

Maulik Modi Punkte 1099
  • Ich habe seit Tagen mit dem gleichen Problem zu kämpfen. Ich habe die OLEDB-Treiber für 64 Bit installiert, auch die für 32 Bit, die auf der Microsoft-Website verfügbar sind.
  • Ich habe versucht, die 64-Bit-Version von Office neu zu installieren, aber irgendwie hat es nicht funktioniert. Versucht, 32-Bit-Anwendung im IIS-Pool zuzulassen.
  • Ich habe versucht, die Projeksumgebung auf X86, AnyMachine, Mixed zu ändern. Und fast alle Patches ausprobiert, die ich im Internet finden konnte. Aber alle Lösungen haben mich enttäuscht.
  • Obwohl ich schließlich herausgefunden habe, dass der Anbieter, den wir heruntergeladen haben, der neueste war und auch nicht damit funktioniert hat.
  • Ich habe es deinstalliert und die oledb-Treiber 14.0.7015.1000 installiert. Ich habe keinen Link dazu, da ich ihn von Unternehmensressourcen erhalten habe, du musst vielleicht danach googeln, aber es funktioniert. Ich bin auf diesen DOWNLOAD LINK von Microsoft gestoßen und es hat auch funktioniert... jedoch ist es Version 14.0.6119.5000, aber es hat funktioniert.

0voto

John Punkte 2273

In meinem Fall habe ich nicht bemerkt, dass ich einen Tippfehler in meiner Verbindungszeichenfolge hatte, der tatsächlich wichtig war. Bitte beachten Sie, dass das .0 am Ende des Anbieters erforderlich ist:

Also ist das korrekt:

PROVIDER=Microsoft.ACE.OLEDB.16.0;

Das ist nicht korrekt:

PROVIDER=Microsoft.ACE.OLEDB.16;

-9voto

Kavit Trivedi Punkte 119

//Lesen Sie die .xls Datei

string strConnection = "";

string FileName = Server.MapPath("Student.xls");

strConnection = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0; HDR=Yes;IMEX=1;'";

try
{
    OleDbConnection conn1 = new OleDbConnection(strConnection);
    conn1.Open();
    DataTable dt = new DataTable();
    dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });

    Object sheetName = dt.Rows[0]["TABLE_NAME"];
    dt.Clear();
    dt.Columns.Clear();
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
    da.TableMappings.Add("Table", "0");
    da.Fill(dt);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string ID = dt.Rows[i][0].ToString();
        string Name = dt.Rows[i][1].ToString();
        string City = dt.Rows[i][2].ToString();
        string Marks = dt.Rows[i][3].ToString();
    }
    conn1.Close();
}
catch
{
    throw;
}
//Um eine xlsx-Datei zu lesen, verwenden Sie den folgenden Code
string strConnection = "";  
string FileName = Server.MapPath("Student.xlsx"); 
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0 Xml;HDR={1};IMEX=1;'";

try
{
    OleDbConnection conn1 = new OleDbConnection(strConnection);
    conn1.Open();

    DataTable dt = new DataTable();
    dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });

    Object sheetName = dt.Rows[0]["TABLE_NAME"];
    dt.Clear();
    dt.Columns.Clear();
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
    da.TableMappings.Add("Table", "0");
    da.Fill(dt);
    //int idx=0;
    //int j=0;
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string ID = dt.Rows[i][0].ToString();
        string Name = dt.Rows[i][1].ToString();
        string City = dt.Rows[i][2].ToString();
        string Marks = dt.Rows[i][3].ToString();
    }

    conn1.Close();
}
catch
{
    throw;
}

//Installieren Sie nun AccessDatabaseEngine.exe von "http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734" Link

Es wird zu 100% funktionieren

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