對象連結和內嵌資料庫 (OLE DB) 是一種Microsoft數據存取技術,可用來使用 OLE DB 提供者將應用程式連線到各種數據源。 針對 OLE DB 驅動程式安裝和驗證進行疑難解答可能很複雜,但對於順暢的資料庫互動至關重要。 此疑難解答指南旨在提供與 OLE DB 驅動程式相關的安裝、驗證和解決問題的深入解析。
透過PowerShell驗證 OLE DB 驅動程式或提供者
若要驗證作系統上是否已安裝最新的 OLE DB 驅動程式,請以系統管理員身分執行下列 PowerShell Cmdlet。
Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft", "HKLM:\SOFTWARE\Wow6432Node\Microsoft" |
Where-Object { $_.Name -like "*MSOLEDBSQL*" } |
ForEach-Object { Get-ItemProperty $_.PSPath }
如果您在作業系統上安裝了版本 18 和 19,輸出可能會看起來像這樣。
InstalledVersion : 18.7.4.0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : MSOLEDBSQL
PSProvider : Microsoft.PowerShell.Core\Registry
InstalledVersion : 19.4.1.0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL19
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : MSOLEDBSQL19
PSProvider : Microsoft.PowerShell.Core\Registry
InstalledVersion : 18.7.4.0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSOLEDBSQL
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
PSChildName : MSOLEDBSQL
PSProvider : Microsoft.PowerShell.Core\Registry
InstalledVersion : 19.4.1.0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSOLEDBSQL19
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
PSChildName : MSOLEDBSQL19
PSProvider : Microsoft.PowerShell.Core\Registry
若要檢查 OLE DB 提供者介面 (SQLNCLI) 安裝,請以系統管理員身分執行下列 PowerShell Cmdlet。
Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft", "HKLM:\SOFTWARE\Wow6432Node\Microsoft" |
Where-Object { $_.Name -like "*SQLNCLi*" } |
ForEach-Object { Get-ItemProperty $_.PSPath}
透過 UDL 檔案驗證 OLE DB 驅動程式
測試 OLE DB 驅動程式的最簡單方式之一是使用通用資料連結 (UDL) 檔案。 在 Windows 檔案總管中建立任何文本檔,並將它重新命名為擴展名為 .udl 。 請確定您已 開啟副檔名 來進行變更。 按兩下檔案以開啟對話框,您可以在其中查看已安裝的提供者並測試其連線。 如需詳細資訊,請參閱 使用UDL檔案測試SQL Server的 OLE DB 連線能力。
選取對話框中的 [確定 ] 以確認組態。
檢查 UDL 檔案內容
如果您在文字編輯器中開啟 UDL 檔案,則可以複製連接字串以在應用程式中使用。 以下提供兩個範例:
Provider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=master;Data Source=localhost;Initial File Name="";Server SPN="";Authentication="";Access Token=""
Provider=SQLNCLI11.1;Integrated Security="";Persist Security Info=False;User ID=sa;Initial Catalog=AdventureWorks;Data Source=tcp:SQLProd01.contoso.com,1433;Initial File Name="";Server SPN=""
驗證 OLE DB 驅動程式
驗證驅動程式的第一個步驟是查看名稱是否出現在 64 位或 32 位 UDL 對話方塊的已安裝提供者清單中,如上一節所示。 如果沒有,您必須重新安裝提供者,或諮詢廠商。
您也可以追蹤登錄中的驅動程式位置。 驅動程式名稱是 COM ProgID,您可以在 HKEY_CLASSES_ROOT中找到它。
使用 SQL Server Native Client 驅動程式作為範例,您可以在下圖中看到 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\CLSIDHKEY_CLASSES_ROOT\CLSID\<guid>\InProcServer32HKEY_CLASSES_ROOT\Wow6432Node\CLSID\<guid>\InProcServer32
這些是32位機器之註冊表編輯器中的路徑:
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSIDHKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32
支援非 Microsoft 相關的供應商
非Microsoft OLE DB 提供者的技術支援僅限於驗證 ProgID 指向有效的 CLSID,且 InProcServer32 子機碼指向正確的 DLL。 如果路徑不正確或登錄專案不存在,請重新安裝提供者或連絡廠商。 如果檔案存在,但登錄專案不存在,您可以使用 手動註冊提供者 REGSVR32。 若要註冊 COM DLL,請在提升權限的命令提示字元中執行下列命令:
Regsvr32 sqlncli11
如果提供者同時有 32 位和 64 位版本,請針對這兩個 DLL 執行 命令。 使用 32 位命令提示字元來註冊 32 位 DLL。