Question

Je suis en train de lire les données à partir du fichier Excel dans asp.net. J'ai ajouté la chaîne de connexion au fichier webConfig:

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

Mais il me montre un errormessage quand je lance cette requête:

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

IO_Definition est le nom de la feuille de calcul dans mon fichier Excel. J'ai aussi ajouté le fichier Excel dans le dossier App_Data du site.

L'erreur est:

Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 'IO_Definition $. Assurez-vous que l'objet existe et que vous épeler son nom et le nom de chemin correctement.

La chose est, quand j'écris le chemin absolu du fichier Excel dans le connectionString il fonctionne. Y at-il de toute façon je peux le faire fonctionner sans écrire le chemin absolu?

Merci,

Greg

Était-ce utile?

La solution

Le problème ici est que pour ce type de connexion « fichier », les besoins des fournisseurs de OleDb, comme vous l'avez trouvé, le chemin absolu du fichier. Historiquement , nous avons fait cela avec Server.MapPath, dans ce cas, vous feriez quelque chose comme:

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

qui fonctionne, mais vous devez soit faire tout ce que chaque fois que vous voulez ouvrir une connexion et d'interrogation des données, ou casser dehors dans une classe de fabrique de connexion.

Une façon plus propre de le faire est la suivante:

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

Lors de l'exécution du |DataDirectory| jeton dans la chaîne de connexion agit comme une macro qui fait silencieusement tout ce genre de choses de Server.MapPath pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top