2010-05-18 46 views
0

我想从asp.net中的excel文件中读取数据。我已经加入了连接字符串webConfig文件:连接字符串读取数据从asp.net中的excel

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

但它显示我的errormessage的,当我运行此查询:“从[IO_Definition $]选择*”

查询字符串=;

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

的错误是:

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

问题是,当我在连接字符串中写入excel文件的绝对路径时,它确实有效。无论如何,我可以让它工作而不写绝对路径?

感谢,

格雷格

+0

没有人知道吗?:( – Greg 2010-05-18 08:25:48

回答

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你。

+0

谢谢!!这个伎俩!:D – Greg 2010-05-23 08:08:14