OleDbException bei zu großen Excel-Dateien



  • Ich habe ein Programm, in dem ich eine Excel-Datei als OleDbConnection öffne:

    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Excel 12.0 Xml;HDR=YES;IMEX=1;data source=Datei.xlsx")
    

    Wenn die Datei zu groß ist (162 MB gehen noch, 171 MB machen schon Probleme), dann kommt beim Aufruf von connection.Open() nach mehrminütiger Wartezeit folgende Exception:

    System.Data.OleDb.OleDbException: The Microsoft Office Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.

    Was ist hier das Problem?

    Wie gesagt, der Fehler passiert nur bei großen Dateien. Das heißt, diese ganzen Lösungen im Internet von wegen "Ordnerberechtigungen ändern" und "Drauf achten, ob die Datei nicht irgendwo im Zugriff ist" dürften hier nicht zutreffen. Kleinere Dateien gehen immer und sie befinden sich an derselben Stelle. Und keine der Dateien ist irgendwo im Zugriff.

    Was muss ich hier anpassen?



  • Ich weiß, keine direkte Antworten, ABER:

    Falls Du nur xlsx-Dateien auslesen musst, nimm EPPlus. Das Auslesen geht schneller und so viel problemfreier.

    Ansonsten:
    - Wenn Du nur lesen willst, bringt vielleicht eine Einschränkung Vorteile: Mode=Read;
    - Mit dem Process Explorer von Sysinternals kannst Du per Find herausfinden, ob tatsächlich kein Zugriff auf der Datei ist.

    [Esterik-An]
    - Vielleicht ist die Datei aus OLEDB-Sicht Buggy - Schmeiß mal ein paar MB Daten aus der Tabelle und schau mal, ob es dann geht. Wenn ja, ist es leider kein "Format-Fehler".
    -Versuch mal, den String in dieser Art aufzubauen:
    string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"" + file + "\";Mode=Read;Extended Properties=\"Excel 12.0 Xml;HDR=No;IMEX=1;ImportMixedTypes=Text\"";
    [Esoterik-Aus]

    Viel Glück noch!


Anmelden zum Antworten