未注册Microsoft.Jet.OLEDB.4.0提供程序或找不到可安装的ISAM的解决办法

各种数据库访问引擎

ODBC:是一种底层的访问技术,因此,ODBC API可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象数据库及其他非关系数据库。
DAO:提供了一种通过程序代码创建和操纵数据库的机制。最大特点是对MICROSOFT JET数据库的操作很方便,而且是操作JET数据库时性能最好的技术接口之一。并且它并不只能用于访问这种数据库,事实上,通过DAO技术可以访问从文本文件到大型后台数据库等多种数据格式。
ADO:是基于OLE DB的访问接口,它是面向对象的OLE DB技术,继承了OLE DB的优点。属于数据库访问的高层接口。
OLEDB和ODBC都是底层系统,都可直接对数据库进行访问,区别在于OLEDB既可以访问关系型数据库,也可访问非关系型数据库,而ODBC只能访问关系型数据库。虽然对不同数据库的操作方法不一样,但统一了通向不同的数据源的底层应用程序接口。

ADO和OLEDB之间的关系为:
OLEDB是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO-技术的应用程序或用于C++的开发者开发定制的数据库组件。
ADO 是基于OLE DB的访问接口,它是面向对象的OLE DB技术,继承了OLE DB的优点。属于数据库访问的高层接口。
OLE DB 是用于访问数据的重要的系统级编程接口,它是 ADO 的基础技术,同时还是 ADO.NET 的数据源。
可以这么说,ADO为OLEDB提供高层应用API函数。

性能的对比:
ODBC(Open DataBase Connectivity)开放数据库互联。是由微软主导的数据库链接标准。
DAO(Data Access Object)数据访问对象。不提供远程访问功能。
ADO(ActiveX Data Object)ActiveX数据对象。基于OLE-DB建立连接的局部和远程数据库访问技术。同OLE-DB一样要“年轻”些。使用中,我们一般用OLE-DB和ADO替代DAO和RDO。
OLE-DB(Object Linking and Embedding DataBase)对象链接和嵌入数据库。它依赖于COM和提供OLE DB提供者的厂商而非ODBC使用的SQL。
MFC(Microsoft Foundation Class)微软基础类。MFC ODBC是对ODBC的封装。
RDO(Remote Data Object)远程数据对象。速度快,支持SQL Server存储过程,同DAO一样是发展很多年了的技术
未注册Microsoft.Jet.OLEDB.4.0提供程序或找不到可安装的ISAM的解决办法_第1张图片

什么是ISAM

(ISAM——索引顺序访问方法:Indexed Sequential Access Method)它是一种索引机制,用于高效访问文件中的数据行。
一般在VB中访问的数据库有三种:
1.JET数据库,即Microsoft Access
2.ISAM数据库,如:dBase,FoxPro等
3.ODBC数据库,凡是遵循ODBC标准的客户/服务器数据库。如:Microsoft SQL Server、Oracle
(ISAM——索引顺序访问方法)是Indexed Sequential Access Method(索引顺序存取方法)的缩写是IBM公司发展起来的一个文件操作系统,可以连续地(按照他们进入的顺序)或者任意地(根据索引)记录任何访问。在ISAM系统,数据组织成有固定长度的记录,按顺序存储的。每个索引定义了一次不同排列的记录。一个职工数据库基于搜寻的信息可以有几个索引。例如,按照职工所属科室的部门索引中,同时还有按照职工姓氏字母顺序排名的名字索引。

Jet和ACE的区别

都是做为连接Excel对象的数据访问接口引擎。

不同点体现在以下几个方面:
1.对于不同的Excel版本,有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称Jet引擎)和Microsoft.ACE.OLEDB.12.0(以下简称ACE引擎)。
2.Jet引擎,可以访问Office97-2003,但不能访问Office2007。
3.ACE引擎是随Office2007一起发布的数据库连接组件,既可以访问Office2007,也可以访问Office97-2003。
4.另外:Microsoft.ACE.OLEDB.12.0可以访问正在打开的Excel文件,而Microsoft.Jet.OLEDB.4.0是不可以的。
所以,在使用不同版本的office时,要注意使用合适的引擎。

可能的原因

0.将程序的编译的目标平台改为x86
网上也有人说程序的目标平台不要用AnyCPU,x64,而改成x86,就能正确连接,我试了之后不好用。

1.字符串连接是否正确,Excel不同的版本对应的连接字符串是不一样的;03版本的驱动用Jet,07以后的版本用ACE。
03版本连接字符串如下:
“Provider=Microsoft.Jet.OleDb.4.0;”+”data source=”+Server.MapPath(filenameurl)+”;Extended Properties=’Excel8.0;HDR=YES;IMEX=1’”

07,10版本连接字符串如下:
“Provider=Microsoft.ACE.OLEDB.12.0;”+”data source=”+Server.MapPath(filenameurl)+”;Extended Properties=’Excel12.0Xml;HDR=YES;IMEX=1’”

在装了07以上版本的office中,可以同时用上述两种连接,在只装了03版本的office中,只能用第一种连接。

2.驱动程序出现了问题
先可以手动注册下面两个文件看看:
32位电脑:注册ExcelISAM在“运行”对话框中:Regsvr32c:\WINDOWS\system32\msexcl40.dll
64位电脑:注册ExcelISAM在“运行”对话框中:Regsvr32C:\Windows\SysWOW64\msexcl40.dll

如果注册不成功,可能是驱动出了问题,需要重新安装驱动。一般而言,装了Office就会自动安装这些驱动,当然微软官方也提供单独得到驱动程序下载:
如:Jet40SP8_9xNT.exe;ACE:Access Database Engine.exe或者Access Database Engine_X64.exe
通过重新安装驱动或许可以解决这个问题。
下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D

3.Office位数和Windows位数导致的问题
这种情况很奇怪,同样的程序,两台电脑分别是64位Windows 7和64位的Office,其中一台可以正常访问excel(所以理论上64位的office应该是自带AccessDatabaseEngine访问引擎的),而另一台不能正常访问,不能访问的那台可能是由于装了其它软件导致某些文件损坏而出现了问题,但即使是通过重装64位Office均不能解决问题。

通过逐步试探,数据访问可用性如下:
* 安装Office X64或者AccessDatabaseEngine_X64.exe的系统上仍不能连接。(64位的不行)
* 安装AccessDatabaseEngine.exe或者office 2016 x86后就没问题。(32位的都可以)
* 先安装32位的Access Database Engine.exe,再安装Office 2016 X64可以连接上。

综上:只有先安装上AccessDatabaseEngine.exe,后面无论安装32位还是64位的Office都可以。但如果先安装了AccessDatabaseEngine_X64.exe或者Office X64,会导致AccessDatabaseEngine.exe安装不上。所以为了解决问题,需要彻底卸载掉Office X64,同时也卸载掉AccessDatabaseEngine_X64.exe,再重新先安装AccessDatabaseEngine.exe,再安装Office,就可以解决问题。

另外,当平台的位数和最终程序的位数不一致的时候,要重点注意各中间层的软件组件是否适配应用程序的位数,一般而言十有八九问题出在这上面。

你可能感兴趣的:(系统设计)