Atualizando um aplicativo do MDAC para o SQL Server Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Importante

O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento de aplicativo. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) ou o Microsoft ODBC Driver for SQL Server mais recente no futuro. Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.

Há várias diferenças entre o SQL Server Native Client e o Microsoft Data Access Components (MDAC; a partir do Windows Vista, os componentes de acesso a dados agora são chamados de Windows Data Access Components ou Windows DAC). Embora ambos forneçam acesso nativo a dados para bancos de dados do SQL Server, o SQL Server Native Client foi projetado especificamente para expor os novos recursos do SQL Server 2005 (9.x) e, ao mesmo tempo, manter a compatibilidade com versões anteriores.

As informações neste tópico ajudam a atualizar seu aplicativo MDAC (ou Windows DAC) para estar atualizado com a versão do SQL Server Native Client que foi incluída no SQL Server 2005 (9.x). Para ajudá-lo a atualizar esse aplicativo com a versão do SQL Server Native Client fornecida no SQL Server, consulte Atualizando um aplicativo do SQL Server 2005 Native Client.

Observação

O SQL Server Native Client foi removido do SQL Server 2022 (16.x).

Além disso, embora o MDAC contenha componentes para usar OLE DB, ODBC e ActiveX Data Objects (ADO), o SQL Server Native Client implementa apenas OLE DB e ODBC (embora o ADO possa acessar a funcionalidade do SQL Server Native Client).

O SQL Server Native Client e o MDAC diferem nas outras áreas a seguir:

  • Os usuários que usam o ADO para acessar um provedor do SQL Server Native Client podem encontrar menos funcionalidade de filtragem do que quando acessaram um provedor SQL OLE DB.

  • Se um aplicativo ADO usar o SQL Server Native Client e tentar atualizar uma coluna computada, um erro será relatado. Com o MDAC, a atualização foi aceita, mas ignorada.

  • O SQL Server Native Client é um único arquivo de biblioteca de vínculo dinâmico (DLL) independente. As interfaces expostas publicamente foram mantidas no mínimo, tanto para facilitar a distribuição quanto para limitar a exposição de segurança.

  • Só há suporte para interfaces OLE DB e ODBC.

  • O provedor OLE DB do SQL Server Native Client e os nomes de driver ODBC são diferentes daqueles usados com o MDAC.

  • A funcionalidade acessível ao usuário fornecida pelos componentes do MDAC está disponível ao usar o SQL Server Native Client. Isso inclui, mas não se limita a, o seguinte: pool de conexões, suporte ao ADO e suporte ao cursor do cliente. Quando qualquer um desses recursos é usado, o SQL Server Native Client fornece apenas conectividade de banco de dados. O MDAC fornece funcionalidades como, por exemplo, rastreamento, controles de gerenciamento e contadores de desempenho.

  • Os aplicativos podem usar serviços principais OLE DB com o SQL Server Native Client, mas se estiverem usando o mecanismo de cursor OLE DB, eles devem usar a opção de compatibilidade de tipo de dados para evitar problemas potenciais que possam surgir porque o mecanismo de cursor não tem conhecimento dos novos tipos de dados do SQL Server 2005 (9.x).

  • O SQL Server Native Client oferece suporte ao acesso a bancos de dados anteriores do SQL Server.

  • O SQL Server Native Client não contém integração XML. O SQL Server Native Client oferece suporte a SELECT ... FOR consultas XML, mas não oferece suporte a nenhuma outra funcionalidade XML. No entanto, o SQL Server Native Client oferece suporte ao tipo de dados xml introduzido no SQL Server 2005 (9.x).

  • O SQL Server Native Client oferece suporte à configuração de bibliotecas de rede do lado do cliente usando apenas atributos de cadeia de conexão. Caso precise de uma configuração de biblioteca de rede mais completa, você deve usar o SQL Server Configuration Manager.

  • O SQL Server Native Client não é compatível com odbcbcp.dll. Os aplicativos que usam APIs ODBC e bcp devem ser recriados para vincular com sqlncli11.lib para usar o SQL Server Native Client.

  • Não há suporte para o SQL Server Native Client do provedor Microsoft OLE DB para ODBC (MSDASQL). Se você estiver usando o driver MDAC SQLODBC com MSDASQL ou MDAC SQLODBC driver com ADO, use OLE DB no SQL Server Native Client..

  • As cadeias de conexão MDAC permitem um valor booliano (true) para a palavra-chave Trusted_Connection. Uma cadeia de conexão do SQL Server Native Client deve usar sim ou não.

  • As alterações menores ocorreram por conta de avisos e erros. Avisos e erros retornados pelo servidor agora mantêm a mesma gravidade quando passados para o SQL Server Native Client. Você não deve se esquecer de testar integralmente o aplicativo caso dependa da interceptação de avisos e erros específicos.

  • O SQL Server Native Client tem uma verificação de erros mais rigorosa do que o MDAC, o que significa que alguns aplicativos que não estão em conformidade estrita com as especificações ODBC e OLE DB podem se comportar de forma diferente. Por exemplo, o provedor SQLOLEDB não impôs a regra de que os nomes de parâmetros devem começar com '@' para parâmetros de resultado, mas o provedor OLE DB do SQL Server Native Client o faz.

  • O SQL Server Native Client se comporta de forma diferente do MDAC em relação a conexões com falha. Por exemplo, o MDAC retorna valores de propriedade armazenados em cache para uma conexão que falhou, enquanto o SQL Server Native Client relata um erro ao aplicativo de chamada.

  • O SQL Server Native Client não gera eventos do Visual Studio Analyzer, mas gera eventos de rastreamento do Windows.

  • O SQL Server Native Client não pode ser usado com perfmon. Perfmon é uma ferramenta do Windows que pode ser usada apenas com DSNs que usem o driver SQLODBC do MDAC incluído no Windows.

  • Quando o SQL Server Native Client está conectado ao SQL Server 2005 (9.x) e versões posteriores, o erro de servidor 16947 é retornado como um SQL_ERROR. Esse erro ocorre quando uma atualização ou exclusão posicionada não atualiza ou exclui uma linha. Com o MDAC, ao estabelecer conexão com qualquer versão do SQL Server, o erro de servidor 16947 é retornado como um aviso (SQL_SUCCESS_WITH_INFO).

  • O SQL Server Native Client implementa a interface IDBDataSourceAdmin , que é uma interface OLE DB opcional que não foi implementada anteriormente, mas somente o método CreateDataSource dessa interface opcional é implementado. Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

  • O provedor OLE DB do SQL Server Native Client retorna sinônimos nos conjuntos de linhas de esquema TABLES e TABLE_INFO, com TABLE_TYPE definido como SYNONYM.

  • Os valores de retorno do tipo de dados varchar(max), nvarchar(max), varbinary(max), xml, udt ou outros tipos de objeto grandes não podem ser retornados para versões de cliente anteriores ao SQL Server 2005 (9.x). Se desejar usar esses tipos como valores de retorno, você deverá usar o SQL Server Native Client.

  • O MDAC permite que as instruções a seguir sejam executadas no início de transações manuais e implícitas, mas o SQL Server Native Client não. Elas devem ser executadas no modo de confirmação automática.

    • Todas as operações de texto completo (indexar e catalogar DDL)

    • Todas as operações de banco de dados (criar, alterar, descartar banco de dados)

    • Reconfigurar

    • Shutdown

    • Encerrar

    • Backup

  • Quando os aplicativos do MDAC se conectarem ao SQL Server, os tipos de dados introduzidos no SQL Server 2005 (9.x) serão exibidos como tipos de dados compatíveis com o SQL Server 2000 (8.x), como mostrado na seguinte tabela.

    Tipo SQL Server 2005 Tipo do SQL Server 2000
    varchar(max) text
    nvarchar(max) ntext
    varbinary(max) imagem
    udt varbinary
    xml ntext

    Esse mapeamento de tipo afeta os valores retornados para metadados da coluna. Por exemplo, uma coluna de texto tem um tamanho máximo de 2.147.483.647, mas o ODBC do SQL Server Native Client relata o tamanho máximo das colunas varchar(max) como SQL_SS_LENGTH_UNLIMITED e o OLE DB do SQL Server Native Client relata o tamanho máximo das colunas varchar(max) como 2.147.483.647 ou -1, dependendo da plataforma.

  • O SQL Server Native Client permite ambiguidade em cadeias de conexão (por exemplo, algumas palavras-chave podem ser especificadas mais de uma vez e palavras-chave conflitantes podem ser permitidas com resolução baseada em posição ou precedência) por motivos de compatibilidade com versões anteriores. Versões futuras do SQL Server Native Client podem não permitir ambiguidade nas cadeias de conexão. É uma boa prática ao modificar aplicativos para usar o SQL Server Native Client para eliminar qualquer dependência da ambiguidade da cadeia de conexão.

  • Se você usar uma chamada ODBC ou OLE DB para iniciar transações, há uma diferença no comportamento entre o SQL Server Native Client e o MDAC; as transações começarão imediatamente com o SQL Server Native Client, mas as transações começarão após o primeiro acesso ao banco de dados usando o MDAC. Isso pode afetar o comportamento de procedimentos armazenados e lotes porque o SQL Server exige que @@TRANCOUNT seja a mesma de quando o lote o ou procedimento armazenado começou após a conclusão da execução.

  • Com o SQL Server Native Client, ITransactionLocal::BeginTransaction fará com que uma transação seja iniciada imediatamente. Com o MDAC, o início da transação foi atrasado até que o aplicativo executasse uma instrução que exigia uma transação em modo de transação implícita. Para obter mais informações, confira SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • Você pode encontrar erros ao usar o driver do SQL Server Native Client com System.Data.Odbc para acessar um computador servidor do SQL Server que expõe novos tipos de dados ou recursos específicos do SQL Server. System.Data.Odbc fornece uma implementação ODBC genérica e, subsequentemente, não expõe a funcionalidade ou extensões específicas do fornecedor. (O driver do SQL Server Native Client é atualizado para oferecer suporte nativo aos recursos mais recentes do SQL Server.) Para contornar esse problema, você pode reverter para o MDAC ou migrar para System.Data.SqlClient.

O SQL Server Native Client e o MDAC oferecem suporte ao isolamento de transação confirmada de leitura usando o controle de versão de linha, mas somente o SQL Server Native Client oferece suporte ao isolamento de transação de instantâneo. (Em termos de programação, o isolamento de transação de leitura confirmada por meio do controle de versão de linha é igual à transação de leitura confirmada.)

Confira também

Criando aplicativos com o SQL Server Native Client