Проверка установки драйвера OLE DB

Сводка

В этой статье показано, как определить, какой драйвер OLE DB или поставщик OLE DB для SQL Server установлен на компьютере с Windows, как убедиться, что он работает, и как проследить его регистрацию в реестре Windows. Используйте эти проверки, когда приложение не может подключиться к SQL Server, и вы подозреваете, что драйвер OLE DB отсутствует или не зарегистрирован.

Проверка драйвера ИЛИ поставщика OLE DB с помощью PowerShell

Чтобы узнать, какие версии драйвера OLE DB для SQL Server установлены в операционной системе, выполните следующий командлет PowerShell от имени администратора.

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

Значение InstalledVersion показывает точную сборку каждого установленного драйвера. Microsoft OLE DB Driver 19 for SQL Server (MSOLEDBSQL19) устанавливает параллельно с Microsoft OLE DB Driver 18 for SQL Server (MSOLEDBSQL), поэтому ожидается отображение обоих ключей. Чтобы убедиться, что вы используете последнюю выпущенную версию, сравните это значение с текущей общедоступной (GA) сборкой, указанной на странице Скачать Microsoft OLE DB Driver for SQL Server.

Проверка установки собственного клиента SQL Server (SQLNCLI)

Чтобы проверить установку интерфейса поставщика OLE DB (SQLNCLI), выполните следующий командлет PowerShell от имени администратора.

Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft", "HKLM:\SOFTWARE\Wow6432Node\Microsoft" |
   Where-Object { $_.Name -like "*SQLNCLi*" } |
   ForEach-Object {   Get-ItemProperty $_.PSPath}

Примечание.

Собственный клиент SQL Server (SNAC, SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не входят в состав SQL Server 2022 (16.x) и более поздних версий, а также SQL Server Management Studio 19 и более поздних версий. Они не рекомендуется использовать для разработки новых приложений. Вместо этого используйте Microsoft OLE DB Driver for SQL Server. В этой статье по-прежнему используется SQLNCLI в примерах, поскольку он всё ещё часто встречается в существующих системах, с которыми вам приходится работать при устранении неполадок.

Проверка драйвера OLE DB с помощью UDL-файла

Одним из самых простых способов тестирования драйвера OLE DB является использование универсального файла канала данных (UDL). Файл UDL открывает диалоговое окно "Свойства канала данных ", в котором перечислены поставщики OLE DB, зарегистрированные на компьютере, и позволяют проверить подключение без полного приложения.

Чтобы создать и открыть UDL-файл, выполните следующие действия.

  1. Убедитесь, что в проводнике включено расширение файлов , чтобы можно было изменить расширение.
  2. Создайте любой текстовый файл в Проводнике, а затем переименуйте его, задав расширение .udl. Выберите "Да", когда Windows предупреждает об изменении расширения имени файла.
  3. Дважды щелкните файл, чтобы открыть диалоговое окно "Свойства канала данных ", где можно увидеть установленных поставщиков и проверить их подключения. Снимок экрана: использование UDL-файла для тестирования поставщика OLE DB.
  4. Нажмите кнопку "ОК " в диалоговом окне, чтобы подтвердить конфигурацию.

Tip

Если дважды щелкнуть файл не открывает диалоговое окно "Свойства канала данных " (например, файл открывается в текстовом редакторе или возвращает ошибку), попробуйте выполнить одно из следующих вариантов:

  • Щелкните правой кнопкой мыши UDL-файл и выберите "Свойства". В большинстве систем это действие также открывает диалоговое окно "Свойства канала данных ".

  • Откройте диалоговое окно непосредственно, выполнив следующую команду, где C:\temp\test.udl — это путь к файлу:

    Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll",OpenDSLFile C:\temp\test.udl

Чтобы открыть 32-разрядное диалоговое окно в 64-разрядной операционной системе, см. раздел "Запуск UDL-файла".

Пошаговые инструкции по тестированию подключения через каждого поставщика см. в статье "Тестирование подключения OLE DB к SQL Server с помощью UDL-файла".

Изучите содержимое файла 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 в реестре Windows

Чтобы проверить драйвер, сначала проверьте, отображается ли имя в списке установленных поставщиков в 64-разрядном или 32-разрядном диалоговом окне UDL, как показано в предыдущем разделе. Если это не так, переустановите поставщика или обратитесь к поставщику.

Если поставщик указан, но подключение по-прежнему не удается, проследите путь к драйверу в реестре. Имя драйвера — com ProgID. Его можно найти в HKEY_CLASSES_ROOT.

Сопоставление ProgID с именем поставщика

С помощью драйвера собственного клиента SQL Server в качестве примера показано сопоставление между ProgID SQLNCLI11.1 и именем поставщика SQL Server Native Client 11.0.

Снимок экрана: сопоставление между progID SQLNCLI11.1 и именем поставщика SQL Server Native Client 11.0.

Идентификаторы ProgID 32-разрядных и 64-разрядных поставщиков отображаются под одним ключом.

Помимо SQLNCLI11.1, есть также ProgID с именем SQLNCLI11. Причиной этого является то, что разработчик поставщика может разрешить установку нескольких версий одного поставщика параллельно, каждый из которых имеет разные числовые суффиксы. Ненумерованное имя — это идентификатор ProgID, не зависящий от версии. Приложения могут указывать на это и перенаправляться на последнюю версию поставщика.

Для всех намерений и целей эти два разных имена ProgID должны быть эквивалентны. Однако могут быть случаи, когда это не так. В таких случаях приложения, использующие имя, не зависящее от версии, не могут подключаться, но могут подключаться, если используется версионное имя ProgID. Причина в том, что две записи указывают на разные значения CLSID, по которым можно найти DLL поставщика.

На снимке экрана показано, как найти DLL-файл поставщика с помощью версии ProgID.

Найти DLL поставщика по CLSID

CLSID — это GUID COM. Инфраструктура COM находит GUID из ProgID. Затем он ищет в разделе HKEY_CLASSES_ROOT\CLSID ключ, GUID которого совпадает с именем ключа:

Снимок экрана: поиск GUID из ProgId в разделе HKEY_CLASSES_ROOT\CLSID.

Значение InProcServer32 указывает на библиотеку DLL поставщика.

Для 32-разрядных поставщиков COM использует тот же GUID, но ищет его в разделе HKEY_CLASSES_ROOT\Wow6432Node\CLSID.

Снимок экрана: поставщик находится в папке SysWow64.

В этом случае поставщик находится в папке SysWow64 .

Примечание.

Эти примеры относятся к 64-разрядным компьютерам. На 32-разрядных компьютерах нет Wow6432Node в реестре.

Пути реестра для проверки наличия SQL Server Native Client 11.0

Эти ключи реестра представляют собой пути к SQL Server Native Client 11.0 в редакторе реестра на 64-разрядных компьютерах:

  • HKEY_CLASSES_ROOT\SQLNCLI11.1\CLSID
  • HKEY_CLASSES_ROOT\CLSID\<guid>\InProcServer32
  • HKEY_CLASSES_ROOT\Wow6432Node\CLSID\<guid>\InProcServer32

Это пути в редакторе реестра для 32-разрядных компьютеров:

  • HKEY_CLASSES_ROOT\SQLNCLI11.1\CLSID
  • HKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32

Поддержка поставщиков OLE DB, отличных от Microsoft

Техническая поддержка для поставщиков OLE DB, не относящихся к Microsoft, ограничивается проверкой того, что ProgID указывает на корректный CLSID и что подраздел InProcServer32 указывает на правильную библиотеку DLL. Если путь неверный или запись реестра не существует, переустановите поставщика или обратитесь к поставщику.

Регистрация библиотеки DLL поставщика вручную с помощью regsvr32

Если файлы существуют, но записи реестра отсутствуют, можно вручную зарегистрировать поставщика с помощью REGSVR32. Чтобы зарегистрировать DLL-библиотеку COM, выполните следующую команду в командной строке, запущенной с повышенными правами:

Regsvr32 sqlncli11

На снимке экрана показана команда, выполняемая от имени администратора, для регистрации COM DLL.

Если доступны как 32-разрядная, так и 64-разрядная версии поставщика, выполните команду для обеих DLL. Используйте 32-разрядную командную строку для регистрации 32-разрядной библиотеки DLL.