3 Stimmen

OLEDBConnection.Open() erzeugt 'Nicht spezifizierter Fehler'.

Ich habe eine Anwendung, die eine Excel-.xls-Datei in das Dateisystem hochlädt, die Datei mit einem oledbconnection-Objekt mit der .open()-Methode auf der Objektinstanz öffnet und dann die Daten in einer Datenbank speichert. Das Hochladen und Schreiben der Datei in das Dateisystem funktioniert gut, aber ich erhalte einen Fehler, wenn ich versuche, die Datei auf unserem Produktionsserver zu öffnen sólo . Die Anwendung funktioniert problemlos auf zwei anderen Servern (Entwicklungs- und Testserver).

Der folgende Code erzeugt einen "Unspecified Error" in der Exception.Message.

Zitat:

        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 Ende

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

Ich glaube, dass es eine Art Berechtigungsproblem gibt, aber ich kann keinen Unterschied zwischen den Berechtigungen für die notierten Ordner und dem Ordner/Verzeichnis, in das die Excel-Datei hochgeladen wird, feststellen. Zum Speichern und Öffnen der Datei wird derselbe Ort verwendet, und die Methoden funktionieren auf meiner Workstation und zwei Webservern. Es handelt sich um Windows 2000 SP4-Server.

3voto

domoaringatoo Punkte 5433

Während das Berechtigungsproblem häufiger vorkommt, kann dieser Fehler auch durch die Verbindungsbeschränkungen von Windows-Dateisystem/Access Jet DB Engine auftreten, ich glaube 64/255. Wenn Sie die 255 gleichzeitigen Access-Lese-/Schreibverbindungen oder die 64(?)-Verbindungsgrenze pro Prozess überschreiten, können Sie genau denselben Fehler erhalten. Zumindest ist mir das in einer Anwendung aufgefallen, in der ständig Verbindungen erstellt und nie richtig geschlossen wurden. Eine einfache Conn.close(); herein und das Leben war gut. Ich kann mir vorstellen, dass Excel ähnliche Probleme haben könnte.

0 Stimmen

Nebenbei bemerkt: Conn.Dispose() schließt die Verbindung offenbar nicht.

1voto

Joshua Turner Punkte 1020

Versuchen Sie, den Ort in einfache Anführungszeichen einzuschließen

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'");

1voto

StronglyTyped Punkte 2046

Wenn Sie Impersonation verwenden, müssen Sie dem Impersonation-Benutzer anstelle des Aspnet-Benutzers bzw. zusätzlich zu diesem eine Berechtigung erteilen.

0voto

Darren Kopp Punkte 74401

Irgendetwas in der inneren Ausnahme? Handelt es sich um eine 64-Bit-Anwendung? Die OLEDB-Anbieter funktionieren nicht in 64-Bit. Sie müssen Ihre Anwendung Ziel x86 haben. Fand dies, wenn ein Fehler beim Versuch, Zugriff auf DB auf meinem 64-Bit-Computer zu öffnen.

0voto

Danimal Punkte 7510

Ich habe diese Fehlermeldung über die Berechtigungen bekommen, aber es sieht so aus, als hätten Sie das im Griff. Ich habe es auch mit einem der Flags in der Verbindungszeichenfolge gesehen - Sie könnten damit ein wenig spielen.

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