Atualizando um aplicativo do MDAC para o SQL Server Native Client
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Importante
O SQL Server Native Client (SNAC) não é fornecido com:
- SQL Server 2022 (16.x) e versões posteriores
- SQL Server Management Studio 19 e versões posteriores
O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdados não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
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 a dados nativos aos 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 que seja atualizado com a versão do SQL Server Native Client incluída no SQL Server 2005 (9.x). Para ajudá-lo a tornar esse aplicativo atualizado 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 SQL Server Native Client podem encontrar menos funcionalidade de filtragem do que quando acessaram um provedor OLE DB do SQL.
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 DLL (biblioteca de vínculo dinâmico) 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.
Os nomes do provedor OLE DB e do driver ODBC do SQL Server Native Client 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 os serviços principais do OLE DB com o SQL Server Native Client, mas se estiverem usando o mecanismo de cursor do OLE DB, eles deverão usar a opção de compatibilidade de tipo de dados para evitar possíveis problemas 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 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 serem vinculados a 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 o driver MDAC SQLODBC 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. Os 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 maneira diferente. Por exemplo, o provedor SQLOLEDB não impôs a regra de que os nomes de parâmetro devem começar com '@' para parâmetros de resultado, mas o provedor OLE DB do SQL Server Native Client sim.
O SQL Server Native Client se comporta de maneira 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 para o 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 o 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 apenas 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 retornados do tipo de dados varchar(max), nvarchar(max), varbinary(max), xml, udt ou outros tipos de objetos grandes não podem ser retornados para versões de cliente anteriores ao SQL Server 2005 (9.x). Se você quiser usar esses tipos como valores retornados, 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 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, haverá uma diferença de 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 SQL Server Native Client com System.Data.Odbc para acessar um computador servidor 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 funcionalidades 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 dão suporte ao isolamento de transação de leitura confirmada usando o controle de versão de linha, mas apenas o SQL Server Native Client dá 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.)