Verificação de instalação do driver OLE DB

Resumo

Este artigo mostra como verificar qual driver ou provedor OLE DB (Object Linking and Embedding Database) para SQL Server está instalado em um computador Windows, como validar se ele funciona e como rastrear seu registro no registro Windows. Use essas verificações quando um aplicativo não puder se conectar ao SQL Server e você suspeitar que o driver OLE DB está ausente ou não registrado.

Validar o driver ou provedor OLE DB por meio do PowerShell

Para localizar quais versões do driver OLE DB para SQL Server estão instaladas no sistema operacional, execute o seguinte cmdlet do PowerShell como administrador.

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

Se você tiver as versões 18 e 19 instaladas no sistema operacional, a saída poderá ser semelhante a esta.

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

O InstalledVersion valor mostra o build exato de cada driver instalado. Microsoft OLE DB Driver 19 for SQL Server (MSOLEDBSQL19) é instalado lado a lado com Microsoft OLE DB Driver 18 for SQL Server (MSOLEDBSQL), portanto, é esperado que ambas as chaves apareçam. Para confirmar se você está executando a versão mais recente, compare o valor com o build de GA (disponibilidade geral) atual listado no download Microsoft Driver do OLE DB para SQL Server.

Verificar se há uma instalação do SQLNCLI (SQL Server Native Client)

Para verificar se há uma instalação do SQLNCLI (interface do provedor OLE DB), execute o seguinte cmdlet do PowerShell como administrador.

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

Observação

SQL Server Native Client (SNAC SQLNCLI ou SQLNCLI11) e o Microsoft provedor OLE DB herdado para SQL Server (SQLOLEDB) não são fornecidos com SQL Server 2022 (16.x) e versões posteriores ou com SQL Server Management Studio 19 e versões posteriores. Eles não são recomendados para o desenvolvimento de novos aplicativos. Em vez disso, use o Microsoft Driver do OLE DB para SQL Server. Este artigo ainda usa SQLNCLI nos exemplos porque ele continua sendo comum nos sistemas existentes para os quais você presta suporte.

Validar o driver OLE DB por meio de um arquivo UDL

Uma das maneiras mais fáceis de testar um driver OLE DB é usar um arquivo UDL (Universal Data Link). Um arquivo UDL abre a caixa de diálogo Propriedades do Link de Dados , que lista os provedores OLE DB registrados no computador e permite testar uma conexão sem um aplicativo completo.

Para criar e abrir um arquivo UDL, siga estas etapas:

  1. Verifique se você tem extensões de arquivo ativadas no Explorador de Arquivos para que você possa alterar a extensão.
  2. Crie qualquer arquivo de texto no Explorador de Arquivos e renomeie-o para ter a extensão de arquivo .udl . Selecione Sim quando Windows avisa sobre como alterar a extensão do nome do arquivo.
  3. Clique duas vezes no arquivo para abrir a caixa de diálogo Propriedades do Link de Dados , na qual você pode ver os provedores instalados e testar suas conexões. A captura de tela mostra como usar o arquivo UDL para testar o provedor OLE DB.
  4. Selecione OK na caixa de diálogo para confirmar a configuração.

Dica

Se clicar duas vezes no arquivo não abrir a caixa de diálogo Propriedades do Link de Dados (por exemplo, o arquivo será aberto em um editor de texto ou retornará um erro), tente uma das seguintes alternativas:

  • Clique com o botão direito do mouse no arquivo .udl e selecione Propriedades. Na maioria dos sistemas, essa ação também abre a caixa de diálogo Propriedades do Link de Dados .

  • Abra a caixa de diálogo diretamente executando o seguinte comando, em que C:\temp\test.udl é o caminho para o seu arquivo:

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

Para abrir a caixa de diálogo de 32 bits em um sistema operacional de 64 bits, consulte Iniciar um arquivo UDL.

Para obter diretrizes passo a passo sobre como testar uma conexão por meio de cada provedor, consulte Testar a conectividade OLE DB para SQL Server usando um arquivo UDL.

Examine o conteúdo do arquivo UDL para obter uma cadeia de conexão

Se você abrir o arquivo UDL em um editor de texto, poderá copiar a cadeia de conexão a ser usada em seu aplicativo. Veja dois exemplos:

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

Rastrear um provedor OLE DB no registro Windows

Para validar um driver, primeiro verifique se o nome aparece na lista de provedores instalados em uma caixa de diálogo UDL de 64 bits ou 32 bits, conforme mostrado na seção anterior. Caso contrário, reinstale o provedor ou entre em contato com o fornecedor.

Se o provedor estiver listado, mas as conexões ainda falharem, rastreie o local do driver no registro. O nome do driver é um COM ProgID. Você pode encontrá-lo em HKEY_CLASSES_ROOT.

Mapear um ProgID para um nome de provedor

Usando o driver SQL Server Native Client como exemplo, a imagem a seguir mostra o mapeamento entre o ProgID SQLNCLI11.1 e o nome do provedor SQL Server Native Client 11.0.

A captura de tela mostra o mapeamento entre o ProgID SQLNCLI11.1 e o nome do provedor SQL Server Native Client 11.0.

O ProgID de provedores de 32 bits e 64 bits aparece sob a mesma chave.

Além do SQLNCLI11.1, há também um ProgID chamado SQLNCLI11. O motivo para isso é que um desenvolvedor de provedor pode permitir que várias versões do mesmo provedor sejam instaladas lado a lado, cada uma com um sufixo numérico diferente. O nome sem numeração é o ProgID independente de versão. Os aplicativos podem apontar para isso e ser redirecionados para a versão mais recente do provedor.

Para todos os efeitos, esses dois nomes ProgID diferentes devem ser equivalentes. No entanto, pode haver casos em que eles não estão. Nesses casos, os aplicativos que usam o nome independente de versão não podem se conectar, mas podem se conectar se estiverem usando o ProgID versionado. O motivo é que as duas entradas apontam para valores CLSID diferentes, que é como localizar a DLL do provedor.

A captura de tela mostra como localizar a dll do provedor usando o ProgId com versão.

Localizar a DLL do provedor a partir do CLSID

O CLSID é o COM GUID. A infraestrutura COM localiza o GUID do ProgID. Em seguida, ele procura sob a chave HKEY_CLASSES_ROOT\CLSID uma chave cujo GUID corresponda ao nome dela:

A captura de tela mostra como localizar um GUID do ProgId em HKEY_CLASSES_ROOT\CLSID.

O InProcServer32 valor aponta para a DLL do provedor.

Para provedores de 32 bits, o COM usa o mesmo GUID, mas procura por ele em HKEY_CLASSES_ROOT\Wow6432Node\CLSID.

A captura de tela mostra que o provedor está localizado na pasta SysWow64.

Nesse caso, o provedor está localizado na pasta SysWow64 .

Observação

Esses exemplos são de máquinas de 64 bits. Em computadores de 32 bits, não há Wow6432Node no Registro.

Caminhos do registro para verificar o SQL Server Native Client 11.0

Essas chaves do Registro são os caminhos para SQL Server Native Client 11.0 no Editor do Registro para computadores de 64 bits:

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

Estes são os caminhos no Editor do Registro para computadores de 32 bits:

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

Suporte para provedores OLE DB não Microsoft

O suporte técnico para provedores OLE DB não Microsoft é limitado à validação de que o ProgID aponta para um CLSID válido e que a InProcServer32 subchave aponta para a DLL correta. Se o caminho estiver incorreto ou a entrada do registro não existir, reinstale o provedor ou entre em contato com o fornecedor.

Registrar uma DLL do provedor manualmente usando regsvr32

Se os arquivos existirem, mas as entradas do Registro não existirem, você poderá registrar manualmente o provedor usando REGSVR32. Para registrar uma DLL COM, execute o seguinte comando em um prompt de comando com privilégios elevados:

Regsvr32 sqlncli11

A captura de tela mostra um comando de administrador para registrar uma DLL COM.

Se houver versões de 32 bits e 64 bits do provedor, execute o comando em ambas as DLLs. Use um prompt de comando de 32 bits para registrar a DLL de 32 bits.