OLEDBConnection.Open () generiert 'Unbekannter Fehler'

Ich habe eine Anwendung, die eine Excel-.xls-Datei in das Dateisystem hochlädt, die Datei mit einem oledbconnection-Objekt unter Verwendung der .open() -Methode für die Objektinstanz öffnet und dann die Daten in einer Datenbank speichert. Das Hochladen und Schreiben der Datei in das Dateisystem funktioniert einwandfrei, aber beim Versuch, die Datei auf dem Produktionsserver only zu öffnen, wird eine Fehlermeldung angezeigt. Die Anwendung funktioniert auf zwei anderen Servern (Entwicklungs- und Testservern).

Der folgende Code generiert einen 'Unspezifizierter Fehler' in der Exception.Message.

Quote:

        System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
        try
        {
            x.Open();
        }
        catch (Exception exp)
        {
            string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs.  " + exp.Message;
            Utilities.SendErrorEmail(errorEmailBody);
        }

: Zitat beenden

Der Server c: \\ temp und c: \ Dokumente und Einstellungen \ aspnet \ local Einstellungen \ temp Ordner geben beide \ aspnet volle Kontrolle.

Ich glaube, dass es eine Art von Berechtigungsproblem gibt, aber scheint keinen Unterschied zwischen den Berechtigungen für die notierten Ordner und dem Ordner/Verzeichnis zu finden, in dem die Excel-Datei hochgeladen wird. Derselbe Speicherort wird verwendet, um die Datei zu speichern und zu öffnen, und die Methoden funktionieren auf meiner Arbeitsstation und zwei Webservern. Windows 2000 SP4-Server.

0
hinzugefügt bearbeitet
Ansichten: 10

6 Antworten

Alles in der inneren Ausnahme? Ist das eine 64-Bit-Anwendung? Die OLEDB-Provider funktionieren nicht in 64-Bit. Sie müssen Ihr Anwendungsziel x86 haben. Dieses Problem wurde gefunden, als beim Versuch, die Zugriffsdatenbank auf meinem 64-Bit-Computer zu öffnen, ein Fehler angezeigt wurde.

0
hinzugefügt

Jep. Das habe ich auch gemacht. Er nahm IMEX = 1 heraus, entfernte erweiterte Eigenschaften usw. Ich schaffte es, es auf den Entwicklungs- und Testservern zu brechen. :) Ich setze diese nacheinander in eins zurück, bis es wieder auf dem Dev und Test stand, aber immer noch kein Workie auf Prod.

0
hinzugefügt

Wenn Sie Identitätswechsel verwenden, müssen Sie dem Identitätswechselbenutzer anstelle von/zusätzlich zum Aspnet-Benutzer die Berechtigung erteilen.

0
hinzugefügt

Ich habe diesen Fehler über die Berechtigungssache bekommen, aber es sieht so aus, als ob Sie das abgedeckt haben. Ich habe es auch mit einem der Flags in der Verbindungszeichenfolge gesehen - Sie könnten damit ein bisschen spielen.

0
hinzugefügt
"Ja wirklich?" Diese Antwort hat dein Problem gelöst?
hinzugefügt der Autor juan, Quelle

Versuchen Sie, die Position in einfache Anführungszeichen zu setzen

System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
0
hinzugefügt

Während das Berechtigungsproblem möglicherweise häufiger ist, können Sie diesen Fehler auch von Windows-Dateisystem/Access Jet DB Engine Verbindungslimits, 64/255 ich denke. Wenn Sie die 255 Access lesen/schreiben gleichzeitige Verbindungen oder die 64 (?) Verbindungslimit pro Prozess können Sie genau diesen gleichen Fehler erhalten. Zumindest habe ich das in einer Anwendung gefunden, in der Verbindungen kontinuierlich erstellt und nie richtig geschlossen wurden. Ein einfacher Conn.close (); fiel ein und das Leben war gut. Ich kann mir vorstellen, dass Excel ähnliche Probleme haben könnte.

0
hinzugefügt
Als Randnotiz: Conn.Dispose() schließt die Verbindung offenbar nicht.
hinzugefügt der Autor Residuum, Quelle