Domanda

Sto cercando di leggere i dati da file excel in asp.net. Ho aggiunto la stringa di connessione in un file webConfig:

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

Ma mi mostra un messaggio d'errore quando faccio funzionare questa domanda:

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

IO_Definition è il nome del foglio di calcolo nel mio file excel. Ho anche aggiunto il file excel nella cartella App_Data del sito web.

L'errore è:

Il motore di database Microsoft Jet Impossibile trovare l'oggetto 'IO_Definition $'. Assicurarsi che l'oggetto esista e che si scrive il suo nome e il nome di percorso correttamente.

Il fatto è che, quando scrivo il percorso assoluto del file Excel nella connectionString funziona. C'è qualche cosa che posso farlo funzionare senza scrivere il percorso assoluto?

Grazie,

Greg

È stato utile?

Soluzione

Il problema qui è che per questo tipo di collegamento 'file', le esigenze provider OLEDB, come hai già trovato, il percorso assoluto del file. Storicamente , abbiamo fatto questo con Server.MapPath, nel qual caso si farebbe qualcosa di simile:

<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();
...

che funziona, ma è necessario sia fare tutto che ogni volta che si desidera aprire una connessione e interrogare i dati, o rompere fuori in una classe di connessione di fabbrica.

Un modo più ordinato per farlo è questo:

<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();
...

In fase di runtime il |DataDirectory| gettone nella stringa di connessione si comporta come una macro che fa in silenzio tutta quella roba Server.MapPath per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top