Sprawdzanie instalacji sterownika OLE DB

Podsumowanie

W tym artykule pokazano, jak sprawdzić, który sterownik lub dostawca bazy danych OLE DB (Object Linking and Embedding Database) dla SQL Server jest zainstalowany na komputerze Windows, jak sprawdzić, czy działa, oraz jak śledzić jego rejestrację w rejestrze Windows. Użyj tych testów, gdy aplikacja nie może nawiązać połączenia z SQL Server i podejrzewasz, że brakuje lub wyrejestrowany sterownik OLE DB.

Weryfikowanie sterownika lub dostawcy OLE DB za pomocą programu PowerShell

Aby dowiedzieć się, które wersje sterownika OLE DB dla SQL Server są zainstalowane w systemie operacyjnym, uruchom następujące polecenie cmdlet programu PowerShell jako administrator.

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

Jeśli masz zainstalowaną wersję 18 i 19 w systemie operacyjnym, dane wyjściowe mogą wyglądać mniej więcej tak.

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

Wartość InstalledVersion przedstawia dokładną kompilację każdego zainstalowanego sterownika. Sterownik Microsoft OLE DB Driver 19 for SQL Server (MSOLEDBSQL19) instaluje się równolegle ze sterownikiem Microsoft OLE DB Driver 18 for SQL Server (MSOLEDBSQL), więc obecność obu kluczy jest oczekiwana. Aby potwierdzić, czy korzystasz z najnowszej wersji, porównaj tę wartość z bieżącą ogólnie dostępną kompilacją (GA) podaną na stronie Pobierz Microsoft OLE DB Driver for SQL Server.

Sprawdzanie instalacji klienta natywnego SQL Server (SQLNCLI)

Aby sprawdzić instalację interfejsu dostawcy OLE DB (SQLNCLI), uruchom jako administrator następujące polecenie cmdlet programu PowerShell.

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

Uwaga

SQL Server Native Client (SNAC SQLNCLI lub SQLNCLI11) i starsze wersje Microsoft OLE DB Provider for SQL Server (SQLOLEDB) nie są dostarczane z SQL Server 2022 (16.x) i nowszymi wersjami lub z SQL Server Management Studio 19 lub nowszymi wersjami. Nie są one zalecane w przypadku tworzenia nowych aplikacji. Zamiast tego użyj Microsoft OLE DB Driver for SQL Server. W tym artykule nadal używasz kodu SQLNCLI w przykładach, ponieważ jest on typowy w istniejących systemach, które należy rozwiązać.

Weryfikowanie sterownika OLE DB za pośrednictwem pliku UDL

Jednym z najprostszych sposobów testowania sterownika OLE DB jest użycie pliku universal Data Link (UDL). Plik UDL otwiera okno dialogowe Właściwości łącza danych , które wyświetla listę dostawców OLE DB zarejestrowanych na komputerze i umożliwia testowanie połączenia bez pełnej aplikacji.

Aby utworzyć i otworzyć plik UDL, wykonaj następujące kroki:

  1. Upewnij się, że masz włączone rozszerzenia plików w Eksploratorze plików, aby można było zmienić rozszerzenie.
  2. Utwórz dowolny plik tekstowy w Eksploratorze plików, a następnie zmień jego nazwę na rozszerzenie pliku UDL . Wybierz pozycję Tak, gdy Windows wyświetli ostrzeżenie o zmianie rozszerzenia nazwy pliku.
  3. Kliknij dwukrotnie plik, aby otworzyć okno dialogowe Właściwości łącza danych , w którym można wyświetlić zainstalowanych dostawców i przetestować ich połączenia. Zrzut ekranu przedstawia sposób używania pliku UDL do testowania dostawcy OLE DB.
  4. Wybierz przycisk OK w oknie dialogowym, aby potwierdzić konfigurację.

Wskazówka

Jeśli dwukrotne kliknięcie pliku nie spowoduje otwarcia okna dialogowego Właściwości łącza danych (na przykład plik zostanie otwarty w edytorze tekstów lub zwróci błąd), spróbuj wykonać jedną z następujących alternatyw:

  • Kliknij prawym przyciskiem myszy plik UDL , a następnie wybierz polecenie Właściwości. W większości systemów ta akcja powoduje również otwarcie okna dialogowego Właściwości łącza danych .

  • Otwórz okno dialogowe bezpośrednio, uruchamiając następujące polecenie, gdzie C:\temp\test.udl jest ścieżką do pliku:

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

Aby otworzyć 32-bitowe okno dialogowe w 64-bitowym systemie operacyjnym, zobacz Uruchamianie pliku UDL.

Aby uzyskać szczegółowe wskazówki dotyczące testowania połączenia za pośrednictwem każdego dostawcy, zobacz Testowanie łączności OLE DB z SQL Server przy użyciu pliku UDL.

Sprawdź zawartość pliku UDL, aby uzyskać parametry połączenia

Jeśli otworzysz plik UDL w edytorze tekstów, możesz skopiować parametry połączenia do użycia w aplikacji. Oto dwa przykłady:

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=""

Śledzenie dostawcy OLE DB w rejestrze Windows

Aby zweryfikować sterownik, najpierw sprawdź, czy nazwa jest wyświetlana na liście zainstalowanych dostawców w 64-bitowym lub 32-bitowym oknie dialogowym UDL, jak pokazano w poprzedniej sekcji. Jeśli tak się nie stanie, ponownie zainstaluj dostawcę lub skontaktuj się z producentem.

Jeśli dostawca jest wymieniony, ale połączenia nadal kończą się niepowodzeniem, śledź lokalizację sterownika w rejestrze. Nazwa sterownika to COM ProgID. Można go znaleźć w HKEY_CLASSES_ROOT.

Mapowanie identyfikatora ProgID na nazwę dostawcy

Korzystając z przykładowego sterownika klienta natywnego SQL Server, na poniższej ilustracji przedstawiono mapowanie między identyfikatorem ProgID SQLNCLI11.1 a nazwą dostawcy SQL Server Native Client 11.0.

Zrzut ekranu przedstawia mapowanie między identyfikatorem ProgID SQLNCLI11.1 i nazwą dostawcy SQL Server Native Client 11.0.

ProgID dostawców zarówno 32-bitowych, jak i 64-bitowych znajduje się pod tym samym kluczem.

Oprócz SQLNCLI11.1 istnieje również identyfikator ProgID o nazwie SQLNCLI11. Przyczyną jest to, że deweloper dostawcy może zezwolić na zainstalowanie wielu wersji tego samego dostawcy obok siebie, z których każdy ma inny sufiks liczbowy. Nazwa nienumerowana jest niezależnym od wersji identyfikatorem ProgID. Aplikacje mogą wskazywać na to i być przekierowywane do najnowszej wersji dostawcy.

Dla wszystkich intencji i celów te dwie różne nazwy ProgID powinny być równoważne. Mogą jednak wystąpić przypadki, w których tak nie jest. W takich przypadkach aplikacje korzystające z nazwy niezależnej od wersji nie mogą się łączyć, ale mogą się połączyć, jeśli używają związanego z wersją identyfikatora ProgID. Przyczyną jest to, że dwa wpisy wskazują różne wartości CLSID , czyli sposób znajdowania biblioteki DLL dostawcy.

Zrzut ekranu pokazuje, jak znaleźć bibliotekę DLL dostawcy przy użyciu wersjonowanego identyfikatora ProgId.

Znajdź bibliotekę DLL dostawcy na podstawie identyfikatora CLSID

Jest to CLSID identyfikator GUID com. Infrastruktura COM odnajduje identyfikator GUID na podstawie ProgID. Następnie w kluczu HKEY_CLASSES_ROOT\CLSID szuka klucza, którego identyfikator GUID jest zgodny z nazwą klucza:

Zrzut ekranu pokazuje, jak odnaleźć identyfikator GUID na podstawie identyfikatora ProgId w kluczu HKEY_CLASSES_ROOT\CLSID.

Wartość InProcServer32 wskazuje bibliotekę DLL dostawcy.

W przypadku dostawców 32-bitowych COM używa tego samego identyfikatora GUID, ale szuka go pod HKEY_CLASSES_ROOT\Wow6432Node\CLSID.

Zrzut ekranu przedstawia dostawcę znajdującego się w folderze SysWow64.

W tym przypadku dostawca znajduje się w folderze SysWow64 .

Uwaga

Te przykłady pochodzą z maszyn 64-bitowych. Na maszynach 32-bitowych w rejestrze nie ma Wow6432Node.

Ścieżki rejestru do sprawdzenia dla SQL Server Native Client 11.0

Te klucze rejestru to ścieżki do SQL Server natywnego klienta 11.0 w Edytorze rejestru dla maszyn 64-bitowych:

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

Są to ścieżki w Edytorze rejestru dla maszyn 32-bitowych:

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

Obsługa dostawców OLE DB innych niż Microsoft

Pomoc techniczna dla dostawców OLE DB firm innych niż Microsoft ogranicza się do sprawdzenia, czy identyfikator ProgID wskazuje na prawidłowy identyfikator CLSID oraz czy podklucz InProcServer32 wskazuje na właściwą bibliotekę DLL. Jeśli ścieżka jest niepoprawna lub wpis rejestru nie istnieje, zainstaluj ponownie dostawcę lub skontaktuj się z producentem.

Ręczne rejestrowanie biblioteki DLL dostawcy przy użyciu rejestru regsvr32

Jeśli pliki istnieją, ale wpisy rejestru nie, możesz ręcznie zarejestrować dostawcę przy użyciu polecenia REGSVR32. Aby zarejestrować bibliotekę DLL COM, uruchom następujące polecenie w wierszu polecenia z podwyższonym poziomem uprawnień:

Regsvr32 sqlncli11

Zrzut ekranu przedstawia polecenie administratora służące do rejestrowania biblioteki DLL COM.

Jeśli dostawca jest dostępny zarówno w wersji 32-bitowej, jak i 64-bitowej, uruchom polecenie dla obu bibliotek DLL. Użyj 32-bitowego wiersza polecenia, aby zarejestrować 32-bitową bibliotekę DLL.