我正在尝试从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 =“从[IO_Definition $]”中选择*;
IO_Definition是我的Excel文件中电子表格的名称。我还将excel文件添加到网站的App_Data文件夹中。
错误是:
Microsoft Jet数据库引擎找不到对象'IO_Definition $'。确保对象存在,并且您正确拼写其名称和路径名称。
问题是,当我在connectionString中写出excel文件的绝对路径时,它确实有效。无论如何我可以在不写绝对路径的情况下使其工作吗?
谢谢,
格雷格
答案 0 :(得分: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
所有内容。