读取Excel的代码如下:
public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName, string where=null,string orderby=null)
{
string strCon = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + filepath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
OleDbConnection ExcelConn = new OleDbConnection(strCon);
try
{
string strCom = string.Format("SELECT * FROM [{0}$]", tableName);
if (!string.IsNullOrEmpty(where))
{
strCom += string.Format(" where {0} ", where);
}
if (!string.IsNullOrEmpty(orderby))
{
strCom += string.Format(" order by {0} ", orderby);
}
ExcelConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "[" + tableName + "$]");
ExcelConn.Close();
myCommand.Dispose();
return ds;
}
catch(OleDbException ex)
{
ExcelConn.Close();
throw ex;
return null;
}
}
发现一个问题。
同一台电脑上,用winfrom写的程序,调用这段代码一切正常。
但是用控制台程序来调用这段代码,就报错。
在 ExcelConn.Open(); 这一句 说
未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序
实际上需要安装的东西我都已经安装了,在winfrom下可以使用的。
有大神知道这是什么问题吗?
http://www.cnblogs.com/GISerYang/archive/2013/03/20/IIS.html
我写的是控制台程序。。要怎么操作?
@网子: 问题搞定了,
确实是因为
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.mappath(db)
"driver=Microsoft Access Driver (*.mdb);DBQ="&Server.MapPath(db)
这两种模式无法在64位下运行。IIS下可以设置运行32位
而winfrom和控制台这些可以在属性里设置目标平台位 X86 既可。
具体的设置: 右键你的项目-》属性-》生成-》目标平台-》X86 即可。
可能你的电脑上的Excel版本过高。你把Excel存成97版本的试试!或者引用一个相符的oleDB Dll。
但是在winfrom下可以用哦?
百度搜索下 未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程
搜索这个问题,都是让你安装一个东东,我已经安装了,因为在winfrom下是可以使用的,所以我觉得不是没有安装的问题。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'
ConnectionString改成这个试试。
报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
@网子: 是不是 路径错了哦
@网子: 操作系统是64位还是32位的?
@DIQI: 64位win7 路径肯定没错、
@网子: 项目属性-生成-目标平台,把Any CPU改成x86应该就OK了。