连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

问题与解决

未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 错误。

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; " + "Data Source =" + excelFileName + ";Extended Properties=Excel 8.0"; 

 解决方案是:

将生成类型改为x86。具体来讲就是在项目的 “属性”那里, 目标平台由原有的“Any CPU” 修改为 “x86” 重新编译。

 

 

有关XLS与XLSX版本的连接字符串设置

使用 Microsoft.Jet.OLEDB.4.0; 如果 Excel 文件名 的扩展名为 xlsx,那么代码运行过程中,会报  “不能更新。数据库或对象为只读。” 的错误。

如果使用 Microsoft.ACE.OLEDB.12.0,扩展名为 xlsx 的时候则不产生错误。因此,C#产生报表的时候,优先使用 Microsoft.ACE.OLEDB.12.0 驱动, 当目标机器无法启用 Microsoft.ACE.OLEDB.12.0 的时候,才使用 Microsoft.Jet.OLEDB.4.0 驱动 。

此时连接字符串改为:

String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFileName + ";Extended Properties=Excel 8.0;";

需要注意的是,上面的驱动,能够成功的创建 xlsx 文件,但是用 Excel 打开的时候,会提示错误信息。驱动需要修改为:

sConnectionString  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="  + excelFileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

即:

修改的地方 Extended Properties=\"Excel 12.0 Xml;HDR=YES\"。 与以前的  Extended Properties=Excel 8.0, 仅仅当扩展名为   xlsx  的时候, 才使用上面那个驱动的写法。如果扩展名还是  xls  那么还是继续使用 原有的写法,也就是那个 Extended Properties=Excel 8.0 的

 

posted @ 2016-09-07 16:05  wenglabs  阅读(1546)  评论(0编辑  收藏  举报