对象链接和嵌入数据库(OLE DB)是一种Microsoft数据访问技术,用于使用 OLE DB 访问接口将应用程序连接到各种数据源。 排查 OLE DB 驱动程序安装和验证问题可能很复杂,但对于无缝数据库交互至关重要。 本故障排除指南旨在提供有关与 OLE DB 驱动程序相关的问题的安装、验证和解决的见解。
通过 PowerShell 验证 OLE DB 驱动程序或提供程序
若要验证作系统上是否安装了适用于 SQL Server 的最新 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 文件测试 OLE DB 到 SQL Server 的连接。
在对话框中选择 “确定” 以确认配置。
检查 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\CLSID
HKEY_CLASSES_ROOT\CLSID\
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\
以下是 32 位计算机的注册表编辑器中的路径:
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSID
HKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32
支持非微软提供程序
对非 Microsoft OLE DB 提供程序的技术支持仅限于验证 ProgID 是否指向有效的 CLSID,以及 InProcServer32 子项是否指向正确的 DLL。 如果路径不正确或注册表项不存在,请重新安装提供程序或联系供应商。 如果文件存在但注册表项不存在,则可以使用 REGSVR32 手动注册提供程序。 若要注册 COM DLL,请在提升的命令提示符处运行以下命令:
Regsvr32 sqlncli11
如果有 32 位和 64 位版本的提供程序,请针对这两个 DLL 运行命令。 使用 32 位命令提示符注册 32 位 DLL。
详细信息
ODBC 驱动程序安装检查
.NET 数据提供程序安装检查
驱动程序安装检查