Atualização de Aplicações a partir do Cliente Nativo do SQL Server 2005

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Baixar driver OLE DB

Este artigo discute as mudanças de destaque no OLE DB Driver for SQL Server desde o SQL Server Native Client in SQL Server 2005 (9.x).

Quando atualiza do Microsoft Data Access Components (MDAC) para o OLE DB Driver for SQL Server, também pode notar algumas diferenças de comportamento. Para obter mais informações, consulte Atualizando um aplicativo para driver OLE DB para SQL Server do MDAC.

O SQL Server Native Client 9.0 foi lançado com o SQL Server 2005 (9.x). O SQL Server Native Client 10.0 foi fornecido com o SQL Server 2008 (10.0.x). O SQL Server Native Client 10.5 foi fornecido com o SQL Server 2008 R2 (10.50.x). O SQL Server Native Client 11.0 foi lançado com o SQL Server 2012 (11.x) e o SQL Server 2014 (12.x).

Comportamento alterado no OLE DB Driver for SQL Server comparado com o SQL Server 2005 (9.x) Native Client Description
O OLE DB faz pads apenas na escala definida. Para conversões em que os dados convertidos são enviados para o servidor, o OLE DB Driver for SQL Driver for SQL Server, apenas deixa zeros de dados até ao comprimento máximo dos valores de data-hora. SQL Server Native Client 9.0 foi preenchido para 9 dígitos.
Validar DBTYPE_DBTIMESTAMP para ICommandWithParameter::SetParameterInfo. OLE DB Driver for SQL Server implementa o requisito OLE DB para que bScale em ICommandWithParameter::SetParameterInfo seja definido para a precisão fracionária de segundos para DBTYPE_DBTIMESTAMP.
O procedimento armazenado sp_columns agora devolve "NÃO" em vez de "NÃO" para a coluna IS_NULLABLE. Em OLE DB Driver for SQL Server, sp_columns procedimento armazenado agora devolve "NÃO" em vez de "NÃO" para uma coluna de IS_NULLABLE.
Erro diferente devolve quando a data está fora do alcance. Para o tipo de data-hora, um número de erro diferente será devolvido pelo OLE DB Driver for SQL Server para uma data fora de intervalo do que era devolvido em versões anteriores.

Especificamente, o SQL Server Native Client 9.0 devolveu 22007 para todos os valores de ano fora do intervalo nas conversões de string para datetime, e o OLE DB Driver for SQL Driver for SQL Server devolve 22008 quando a data está dentro do intervalo suportado por datetime2 mas fora do intervalo suportado por datetime ou smalldatetime.
O valor datetime trunca frações de segundo e não arredonda se arredondar alterar o dia. Antes do SQL Server Native Client 10.0, o comportamento do cliente para valores de data-hora enviados ao servidor era arredondar para o 1/300 de segundo mais próximo. No OLE DB Driver for SQL Server, este cenário causa uma truncação de frações de segundo se o arredondamento alterar o dia.
Possível truncamento de segundos para valor data-hora . Uma aplicação construída com OLE DB Driver for SQL Server que se liga a um servidor SQL Server 2005 trunca segundos e frações de segundo para a parte temporal dos dados enviados para o servidor se associar a uma coluna data-hora com um identificador de tipo DBTYPE_DBTIMESTAMP (OLE DB) ou SQL_TIMESTAMP (ODBC) e uma escala de 0.

Por exemplo:

Dados de entrada: 1994-08-21 21:21:36.000

Dados inseridos: 21-08-1994 21:21:00.000
A conversão de dados do OLE DB de DBTYPE_DBTIME para DBTYPE_DATE já não pode fazer com que o dia mude. Antes SQL Server Native Client 10.0, se a parte do tempo de um DBTYPE_DATE estivesse a meio segundo da meia-noite, o código de conversão do OLE DB fazia o dia mudar. No OLE DB Driver for SQL Server, o dia não muda (as frações de segundo são truncadas e não arredondadas).
Alterações na conversão IBCPSession::BCColFmt. No OLE DB Driver for SQL Server, quando usa IBCPSession::BCOColFmt para converter SQLDATETIME ou SQLDATETIME para um tipo de string, é exportado um valor fracionado. Por exemplo, ao converter o tipo SQLDATETIME para o tipo SQLNVARCHARMAX, versões anteriores ao SQL Server Native Client 10.0 retornaram
1989-02-01 00:00:00.
OLE DB Driver for SQL Server retorna
1989-02-01 00:00:00.0000000.
Aplicações personalizadas que utilizam a API BCP podem agora ver um aviso. A API BCP gerará uma mensagem de aviso se o comprimento dos dados for maior do que o comprimento especificado para um campo para todos os tipos. Anteriormente, este aviso era dado apenas para tipos de personagens, mas não será emitido para todos os tipos.
Inserir uma cadeia vazia num limite sql_variant como tipo data/hora gera um erro. No SQL Server Native Client 9.0, inserir uma string vazia num limite de sql_variant como tipo data/hora não gerava erro. O OLE DB Driver for SQL Server gera corretamente um erro nesta situação.
O SQL Server pode devolver resultados diferentes quando um gatilho é executado. Alterações introduzidas no SQL Server 2008 (10.0.x) podem fazer com que uma aplicação receba resultados diferentes de uma instrução que fez com que um gatilho fosse executado quando NOCOUNT o OFF estava em vigor. Nesta situação, a sua aplicação pode gerar um erro. Para resolver este erro, defina NOCOUNT ON no gatilho.

Consulte também

Driver OLE DB para SQL Server