Pregunta

Estoy intentando leer datos de archivo de Excel en asp.net. He añadido a la cadena de conexión de archivos webConfig:

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

Pero me muestra un ErrorMessage cuando corro esta consulta:

cadena de consulta = "SELECT * FROM [IO_Definition $]";

IO_Definition es el nombre de la hoja de cálculo en mi archivo de Excel. También he añadido el archivo de Excel a la carpeta App_Data de la página web.

El error es:

El motor de base de datos Microsoft Jet no pudo encontrar el objeto 'IO_Definition $'. Asegúrese de que el objeto existe y que ha escrito su nombre y el nombre de ruta correctamente.

La cosa es que cuando escribo la ruta absoluta del archivo de Excel en el connectionString que hace el trabajo. ¿Hay alguna forma de hacer que funcione sin tener que escribir la ruta absoluta?

Gracias,

Greg

¿Fue útil?

Solución

El problema aquí es que para este tipo de conexión 'archivo', las necesidades de los proveedores de OleDb, como ya has encontrado, la ruta absoluta al archivo. Históricamente , hemos hecho esto con Server.MapPath, en cuyo caso se haría algo como:

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

que obras, pero hay que hacer todo bien que cada vez que desee abrir una conexión y consulta de los datos, o romperlo a cabo en una clase de fábrica de conexiones.

Una forma más limpia de hacerlo es la siguiente:

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

En tiempo de ejecución del |DataDirectory| de ficha en la cadena de conexión actúa como una macro, que en silencio lo hace todo eso Server.MapPath para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top