解决方法of未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

在开发的一个报表转换功能涉及到Excel97-2003(.xls)文件的导入。使用oledb来读取excel数据。代码为:

public static DataSet LoadDataFromExcel(string filePath, string[] sheetNames)
{
    string strConn;
    //  strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";  
    //strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=No\"";  //这是2010的链接字符串,不同版本链接不同
    strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
    OleDbConnection OleConn = new OleDbConnection(strConn);
    OleConn.Open();
    DataSet OleDsExcle = new DataSet();
    foreach (string name in sheetNames)
    {
        string sql = "SELECT * FROM [" + name + "$]";
        OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
        OleDaExcel.Fill(OleDsExcle, name);
    }
    OleConn.Close();
    return OleDsExcle;
}

我使用的IDE是vs2013,OS是win7 64位,调试程序时报异常:

“System.InvalidOperationException”类型的未经处理的异常在 System.Data.dll 中发生

其他信息: 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

 

解决方法为:

在项目属性的“生成“里,将目标平台由默认的Any CPU改为x86

 

ps: 对于web网站,excel导入用OLEDB同样会报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

这时,需要修改app pool的设置。“应用程序池默认属性”/“常规”/”启用32位应用程序”,设置为 true。

 

 

看来,使用OLEDB还是要付出代价的,呵呵。 使用NPOI则不需要任何设置哦~

 

转载于:https://www.cnblogs.com/buguge/p/4845997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值