Announcement

Collapse
No announcement yet.

OLE Exception -2147467259 beim Auslesen einer Exceldatei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OLE Exception -2147467259 beim Auslesen einer Exceldatei

    Hallo!

    Es geht um das Auslesen einer Exceldatei in einer Webanwendung mit OLE in C#. Hier erst einmal ein paar Informationen vorab:

    Ich entwickle lokal unter Window XP, Visual Studio 2005, C#. Office 2003 und alle aktuellen Patches sind auch installiert. Der Webserver läuft unter Windows 2003 Server mit .NET Runtime (also ohne Visual Studio und Office ...). Der Server ist auch aktuell gepatched.

    Folgenden Code habe ich zum Auslesen einer Exceldatei geschrieben:

    //--------------------------- Code -------------------------------------------
    string strPfad = "C:\download\";
    string strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + this.strPfad + ";" + "Extended Properties=Excel 8.0;";
    string strTablename = "";

    DataTable dtSchema = new DataTable();
    OleDbCommand olecmSelectCommand = new OleDbCommand();
    OleDbDataAdapter oleadAdapter = new OleDbDataAdapter();
    DataTable dtTempDatatable = new DataTable();

    OleDbConnection olecnConnection = null;
    olecnConnection = new OleDbConnection(strConnString);

    olecnConnection.Close();
    olecnConnection.Open();

    dtSchema = olecnConnection.GetOleDbSchemaTable(System.Data.Ol eDb.OleDbSchemaGuid.Tables, null);
    strTablename = (System.String)dtSchema.Rows[0]["TABLE_NAME"];
    olecmSelectCommand = new OleDbCommand("SELECT * FROM [" + strTablename + "]", olecnConnection);
    oleadAdapter.SelectCommand = olecmSelectCommand;
    oleadAdapter.Fill(dtTempDatatable);

    olecnConnection.Close();
    olecnConnection.Dispose();

    olecnConnection = null;
    oleadAdapter.Dispose();
    olecmSelectCommand.Dispose();
    dtSchema.Dispose();
    //---------------------------------------------------------------------------

    Nun zum Problem. Der Code funktioniert auf dem Server wunderbar. Aber wenn ich ihn lokal (z.B. zum Debuggen und Entwickeln) ausführe, erhalte ich eine OLE Exception. Ich konnte die Exception bis zum Öffnen der OLE- Verbindung (olecnConnection.Open()) verfolgen. Dort wird die Exception geworfen. Warum funktioniert es auf dem Server und bei mir lokal nicht? Ich bitte um Hilfe!

    ex: {"Unbekannter Fehler"}
    ErrCode: -2147467259
    Errors: {System.Data.OleDb.OleDbErrorCollection}
    Source: "Microsoft JET Database Engine"
    StackTrace: " bei System.Data.OleDb.OleDbConnectionInternal..ctor(Ol eDbConnectionString constr, OleDbConnection connection)\r\n bei System.Data.OleDb.OleDbConnectionFactory.CreateCon nection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)\r\n bei System.Data.ProviderBase.DbConnectionFactory.Creat eNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)\r\n bei System.Data.ProviderBase.DbConnectionFactory.GetCo nnection(DbConnection owningConnection)\r\n bei System.Data.ProviderBase.DbConnectionClosed.OpenCo nnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)\r\n bei System.Data.OleDb.OleDbConnection.Open()\r\n bei . in :Zeile 49.\r\n bei . in :Zeile 100."

    Alarion.

  • #2
    Hallo,

    für den Zugriff über die JET Engine wird MDAC benötigt. Allerdings gibt es dort zwei verschiedene Teile. Um zu prüfen, ob die JET Engine auf dem Entwicklungsrechner betriebsbereit ist, würde ich den folgenden Test machen.

    1. In einem beliebigen Verzeichnis die Datei Test.udl anlegen.

    2. Im Windows-Explorer einen Doppelklick auf die Datei Test.udl machen, dabei wird der Dialog Datenverknüpfungseigenschaften angezeigt.

    3. Auf der Registerseite Provider den Microsoft Jet 4.0 OLE DB-Provider auswählen.

    4. Auf der Registerseite Verbindung die XLS-Datei auswählen.

    5. Auf der Registerseite Alle in der Zeile Extended Properties den Wert "Excel 8.0" eintragen.

    6. Auf der Registerseite Verbindung den Button Verbindung testen anklicken. Wenn die JET Engine vollständig installiert ist, wird der erfolgreich Test zurückgemeldet. Wenn der Verbindungstest fehlschlägt, muss ein MDAC-Update nachinstalliert werden, dass den vollen Funktionsumfang der JET Engine nachrüstet. Momentan sollte MDAC 2.81 aktuell sein.
    Zuletzt editiert von Andreas Kosch; 20.03.2007, 09:34.

    Comment


    • #3
      Hallo,

      ich den von Ihnen beschriebenen Versuch gemacht. Der Verbindungstest war erfolgreich (also hat funktioniert). Bei MDAC hast du bestimmt die Version 2.8 gemeint, oder? Auf der Microsoft- Webseite ist die aktuelle Version 2.8. Installieren lässt sich MDAC lokal bei mir nicht, weil "alle Funktionen Bestandteil von Windows" XP sind. An MDAC liegt es meiner Meinung nach nicht.

      Alarion.

      Comment


      • #4
        Hallo,

        ja, ich habe MDAC 2.81 gemeint.

        Der Verbindungstest war erfolgreich (also hat funktioniert).
        In diesem Fall kann es nur ein Berechtigungsproblem sein. Wenn die Webanwendung auf dem lokalen IIS gestartet wird, erfolgt der Zugriff über das Benutzerkonto ASPNET. Jetzt ist die Frage, ob der Benutzer ASPNET auf dem lokalen Rechner auch die Rechte am NTFS-Verzeichnis bzw. der Registry hat?

        Comment


        • #5
          Hi!

          Die Berechtigunen im NTFS habe ich überprüft. Auf das Verzeichnis bzw. dann vererbt die Exceldatei habe ich mal Vollzugriff für den ASPNET- Benutzer gegeben. Keine Änderung des Verhaltens. Dann habe ich die Benutzer des IIS dazugenommen. Keine Änderung des Verhaltens. Dann habe ich es auf "jeden" erweitert. Das hat auch nichts gebracht.

          Dann habe ich noch explizit Vollzugriff auf das Verzeichnis per Code Access Security gegeben. Leider auch keine Änderung des Verhaltens.


          Alarion.

          Comment

          Working...
          X