繁体   English   中英

连接字符串从asp.net中的excel读取数据

[英]connection string reading data from excel in asp.net

我正在尝试从asp.net中的excel文件读取数据。 我已将连接字符串添加到webConfig文件中:

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

但是当我运行以下查询时,它显示了一个错误消息:

字符串查询=“从[IO_Definition $]中选择*”;

IO_Definition是我的excel文件中电子表格的名称。 我还将excel文件添加到网站的App_Data文件夹中。

错误是:

Microsoft Jet数据库引擎找不到对象“ IO_Definition $”。 确保对象存在,并且正确拼写了它的名称和路径名。

问题是,当我在connectionString中写入excel文件的绝对路径时,它确实起作用。 无论如何,我可以在不编写绝对路径的情况下使其工作吗?

谢谢,

格雷格

这里的问题是,对于这种“文件”连接,OleDb提供程序需要文件的绝对路径,正如您已经发现的那样。 从历史上看 ,我们使用Server.MapPath做到了这一点,在这种情况下,您将执行以下操作:

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

可以,但是每次打开连接并查询数据时都需要做所有这些事情,或者将其分解为连接工厂类。

一个更整洁的方法是这样的:

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

在运行时|DataDirectory| 连接字符串中的令牌充当宏,它将为您静默处理所有Server.MapPath内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM