1. 程式人生 > >未註冊Microsoft.Jet.OLEDB.4.0提供程式或找不到可安裝的ISAM的解決辦法

未註冊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一樣是發展很多年了的技術
這裡寫圖片描述

什麼是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,就可以解決問題。

另外,當平臺的位數和最終程式的位數不一致的時候,要重點注意各中間層的軟體元件是否適配應用程式的位數,一般而言十有八九問題出在這上面。