對象連結和內嵌資料庫 (OLE DB) 是一種Microsoft數據存取技術,可用來使用 OLE DB 提供者將應用程式連線到各種數據源。 針對 OLE DB 驅動程式安裝和驗證進行疑難解答可能很複雜,但對於順暢的資料庫互動至關重要。 此疑難解答指南旨在提供與 OLE DB 驅動程式相關的安裝、驗證和解決問題的深入解析。
關於 UDL 檔案
測試 OLE DB 提供者的最簡單方式之一是透過通用資料連結 (UDL) 檔案。 在 Windows 檔案總管中建立任何文字檔,並將它重新命名為具有 。UDL 擴展名。 請確定您已開啟擴展名來進行變更。 如需詳細資訊,請參閱 使用UDL檔案測試SQL Server的 OLE DB 連線能力
按兩下檔案以開啟對話框,您可以在其中查看已安裝的提供者並測試其連線。
注意
如果您在對話框中選取 [確定],您可以在 [記事本] 中開啟 UDL 檔案,以查看您可以在應用程式中使用的 連接字串。 例如:
Provider=SQLNCLI11.1;Integrated Security="";Persist Security Info=False;User ID=sa;Initial Catalog=northwind;Data Source=tcp:SQLProd01.contoso.com,1433;Initial File Name="";Server SPN=""
UDL 檔案 UI 是由 OLEDB32.DLL 提供,並裝載於 RUNDLL32.DLL。
針對 32 位系統或 64 位系統上的 64 位提供者,請使用下列命令:
Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll",OpenDSLFile C:\test.udl
針對 64 位系統上的 32 位提供者,請使用下列命令:
C:\Windows\SysWOW64\Rundll32.exe C:\PROGRA~2\COMMON~1\System\OLEDB~1\oledb32.dll,OpenDSLFile C:\test.udl32
。 UDL 擴展名會對應至第一個命令。 針對第二個,您可以執行 32 位命令提示字元,然後執行 START C:\TEMP\TEST.UDL
以測試 32 位提供者來簡化工作。 甚至更簡單的是對應 。32 位命令的UDL32 擴展名。
32 位 .udl32 擴展名對應
如果您經常使用 32 位提供者,您可以對應擴展名 .udl32 來啟動 32 位 UDL 對話方塊。 執行下列步驟:
將腳本複製到 [記事本],並將它儲存為 udl32.reg。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.UDL32] @="ft000001" [HKEY_CLASSES_ROOT\ft000001] @="Microsoft Data Link 32" "BrowserFlags"=dword:00000008 "EditFlags"=dword:00000000 [HKEY_CLASSES_ROOT\ft000001\shell] @="open" [HKEY_CLASSES_ROOT\ft000001\shell\open] [HKEY_CLASSES_ROOT\ft000001\shell\open\command] @="C:\\Windows\\SysWOW64\\Rundll32.exe C:\\PROGRA~2\\COMMON~1\\System\\OLEDB~1\\oledb32.dll,OpenDSLFile %1" [HKEY_CLASSES_ROOT\ft000001\shell\open\ddeexec]
按兩下 .reg 檔案,然後您可以建立擴展名為 .udl32 的檔案。 例如, test.udl32。 它會啟動 32 位 UDL 對話方塊。 例如:
驗證 OLE DB 提供者
驗證提供者的第一個步驟是查看名稱是否出現在 64 位或 32 位 UDL 對話方塊的已安裝提供者清單中,如上所示。 如果沒有,您必須重新安裝提供者,或諮詢廠商。
您也可以追蹤登錄中的驅動程式位置。 驅動程式名稱是 COM ProgID,您可以在 HKEY_CLASSES_ROOT中找到它。
在下圖中,您可以看到 ProgID SQLNCLI11.1 與提供者名稱 SQL Server Native Client 11.0 之間的對應。
32 位和 64 位提供者的 ProgID 會出現在此機碼底下。
除了 SQLNCLI11.1 之外,還有一個名為 SQLNCLI11 的 ProgID。 這是因為提供者開發人員可能會允許多個版本的相同提供者並存安裝,每個版本都有不同的數值後綴。 未編號的名稱是與版本無關的 ProgID。 應用程式可以指向此專案,並重新導向至最新版本的提供者。
針對所有意圖和用途,這兩個不同的 ProgID 名稱應該相等。 然而,有幾個情況沒有。 使用版本獨立名稱的應用程式無法連線,但如果使用已建立版本的 ProgID,則可以連線。 原因是兩個專案指向不同的 CLSID 值,也就是如何尋找提供者 DLL。
CLSID
是 COM GUID。 COM 基礎結構會從 ProgID 找出 GUID。 然後,它會在金鑰底 HKEY_CLASSES_ROOT\CLSID
下尋找 GUID 符合金鑰名稱的金鑰:
值 InProcServer32
會指向提供者 DLL。
若為 32 位提供者,COM 會使用相同的 GUID,但在 底下 HKEY_CLASSES_ROOT\Wow6432Node\CLSID
尋找它。
在此情況下,提供者位於 SysWow64 資料夾中。
注意
這些範例來自64位機器。 在 32 位電腦上,登入中沒有 Wow6432Node
。
這些是 64 位電腦註冊表編輯器中 SQL Native Client 11.0 的路徑:
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSID
HKEY_CLASSES_ROOT\CLSID\<guid>\InProcServer32
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\<guid>\InProcServer32
這些是32位機器之註冊表編輯器中的路徑:
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSID
HKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32
支援第三方提供者
第三方 OLE DB 提供者的支援僅限於驗證 ProgID 指向有效的 CLSID,而 InProcServer32
子機碼指向正確的 DLL。 如果路徑不正確或登錄專案不存在,請重新安裝提供者或連絡廠商。 如果檔案存在,但登錄專案不存在,您可以使用 手動註冊提供者 REGSVR32
。 若要註冊 COM DLL,請在提升權限的命令提示字元中執行下列命令:
Regsvr32 sqlncli11
如果提供者同時有 32 位和 64 位版本,請針對這兩個 DLL 執行 命令。 使用 32 位命令提示字元來註冊 32 位 DLL。