Frage

Ich versuche, Daten aus Excel-Datei in asp.net zu lesen. Ich habe die Verbindungszeichenfolge zu webConfig-Datei hinzugefügt:

<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HPM_DB.xls;Extended Properties=Excel 8.0"/>

Aber es zeigt mir eine Fehlernachricht, wenn ich diese Abfrage ausführen:

string query = "select * from [IO_Definition $]";

IO_Definition ist der Name der Tabelle in meiner Excel-Datei. Ich habe auch die Excel-Datei in den Ordner App_Data der Website hinzugefügt.

Der Fehler ist:

Die Microsoft Jet-Datenbankmodul konnte das Objekt ‚IO_Definition $‘ gefunden. Stellen Sie sicher, dass das Objekt vorhanden ist, und Sie seinen Namen buchstabieren und den Pfadnamen richtig.

Die Sache ist, wenn ich den absoluten Pfad der Excel-Datei in der Connection schreibe es funktioniert. Gibt es trotzdem kann ich es ohne das Schreiben den absoluten Pfad funktioniert?

Danke,

Greg

War es hilfreich?

Lösung

Das Problem hier ist, dass für diese Art von ‚Datei‘ Verbindung, die OLE DB-Provider Bedürfnisse, wie Sie bereits gefunden haben, der absolute Pfad zur Datei. Historisch , wir haben dies getan mit Server.MapPath, in welchem ??Fall würden Sie so etwas wie:

<connectionstrings>
    <add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;"/>
</connectionstrings>

String connString;
OleDbConnection conn;

connString = Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString;
connString = connString + Server.MapPath("~/App_Data/HPM_DB.xls");

conn = new OleDbConnection(connString);

conn.Open();
...

, die funktionieren, aber Sie müssen entweder alles tun, dass jedes Mal, wenn Sie eine Verbindung und Abfrage der Daten geöffnet werden sollen, oder es bricht in eine Verbindungs-Factory-Klasse.

Eine ordentliche Art und Weise, es zu tun, ist dies:

<connectionstrings>
    <add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;
    Data Source=|DataDirectory|\HPM_DB.xls;"/>
</connectionstrings>

OleDbConnection conn;

conn = new OleDbConnection(Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString);
conn.Open();
...

Zur Laufzeit der |DataDirectory| in der Verbindungszeichenfolge-Token fungiert als Makro, das leise hat das alles Server.MapPath Sachen für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top