连接string从asp.net中读取数据

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

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

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

string查询=“select*从[IO_Definition $]”;

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

错误是:

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

事情是,当我写的连接string中的Excel文件的绝对path它的工作。 无论如何,我可以使其工作,而不写绝对path?

谢谢,

格雷格

这里的问题是,对于这种“文件”连接,OleDb提供程序需要(如您已经find的)文件的绝对path。 从历史上看 ,我们已经使用Server.MapPath完成了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| 连接string中的标记充当了一个macros,默默地为你做了所有的Server.MapPath东西。