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