0

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

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

但是当我运行此查询时,它会显示一条错误消息:

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

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

错误是:

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

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

谢谢,

格雷格

4

1 回答 1

3

这里的问题是,对于这种“文件”连接,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为您完成所有这些工作。

于 2010-05-18T13:55:51.540 回答