Partilhar via


Atualizando um aplicativo do SQL Server 2005 Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

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) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para SQLNCLI fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção Ciclo de vida do suporte.

Este tópico discute as alterações recentes no SQL Server Native Client desde o SQL Server Native Client no SQL Server 2005 (9.x).

Quando você atualiza do Microsoft Data Access Components (MDAC) para o SQL Server Native Client, você também pode ver algumas diferenças de comportamento. Para obter mais informações, consulte atualizando um aplicativo para o SQL Server Native Client do MDAC.

O SQL Server Native Client 9.0 foi fornecido 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 fornecido com o SQL Server 2012 (11.x) e o SQL Server 2014 (12.x).

Comportamento alterado no SQL Server Native Client desde o SQL Server 2005 (9.x) Descrição
OLE DB pads apenas para a escala definida. Para conversões em que os dados convertidos são enviados para o servidor, o SQL Server Native Client (a partir do SQL Server 2008 (10.0.x)) preenche zeros à direita nos dados apenas até o comprimento máximo de valores de datetime. SQL Server Native Client 9.0 acolchoado a 9 dígitos.
Valide DBTYPE_DBTIMESTAMP para ICommandWithParameter::SetParameterInfo. O SQL Server Native Client (a partir do SQL Server 2008 (10.0.x)) implementa o requisito OLE DB para bScale em ICommandWithParameter::SetParameterInfo a ser definido com a precisão de segundos fracionários para DBTYPE_DBTIMESTAMP.
O procedimento armazenado sp_columns agora retorna "NÃO" em vez de "NÃO" para a coluna IS_NULLABLE. A partir do SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)), sp_columns procedimento armazenado agora retorna "NÃO" em vez de "NÃO" para uma coluna IS_NULLABLE.
SQLSetDescRec, SQLBindParameter e SQLBindCol agora executam verificação de consistência. Antes do SQL Server Native Client 10.0, a configuração SQL_DESC_DATA_PTR não causava uma verificação de consistência para qualquer tipo de descritor em SQLSetDescRec, SQLBindParameter ou SQLBindCol.
SQLCopyDesc agora faz a verificação de consistência do descritor. Antes do SQL Server Native Client 10.0, o SQLCopyDesc não fazia uma verificação de consistência quando o campo SQL_DESC_DATA_PTR era definido em um registro específico.
SQLGetDescRec não faz mais uma verificação de consistência do descritor. Antes do SQL Server Native Client 10.0, o SQLGetDescRec executava uma verificação de consistência do descritor quando o campo SQL_DESC_DATA_PTR era definido. Isso não era exigido pela especificação ODBC e, no SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) e versões posteriores, essa verificação de consistência não é mais executada.
Erro diferente retornado quando a data está fora do intervalo. Para o tipo de datetime , um número de erro diferente será retornado pelo SQL Server Native Client (começando no SQL Server 2008 (10.0.x)) para uma data fora do intervalo do que foi retornado em versões anteriores.

Especificamente, o SQL Server Native Client 9.0 retornou 22007 para todos os valores de ano fora do intervalo em conversões de cadeia de caracteres para datetimee o SQL Server Native Client a partir da versão 10.0 (SQL Server 2008 (10.0.x)) retorna 22008 quando a data está dentro do intervalo suportado por datetime2 mas fora do intervalo suportado por datetime ou smalldatetime.
valor de datetime trunca segundos fracionários e não arredonda se o arredondamento mudar o dia. Antes do SQL Server Native Client 10.0, o comportamento do cliente para valores de datetime enviados ao servidor é arredondar para 1/300 de segundo mais próximo. A partir do SQL Server Native Client 10.0, esse cenário causa um truncamento de segundos fracionários se o arredondamento mudar o dia.
Possível truncamento de segundos para valor de datetime. Um aplicativo criado com o SQL Server 2008 (10.0.x) Native Client (ou posterior) que se conecta a um servidor SQL Server 2005 truncará segundos e segundos fracionários para a parte de tempo dos dados enviados ao servidor se você vincular a uma coluna datetime com um identificador de tipo de 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: 1994-08-21 21:21:00.000
A conversão de dados OLE DB de DBTYPE_DBTIME para DBTYPE_DATE não pode mais fazer com que o dia mude. Antes do SQL Server Native Client 10.0, se a parte de tempo de um DBTYPE_DATE estivesse dentro de meio segundo da meia-noite, o código de conversão OLE DB fazia com que o dia mudasse. A partir do SQL Server Native Client 10.0, o dia não será alterado (os segundos fracionários são truncados e não arredondados).
Alterações de conversão IBCPSession::BCColFmt. A partir do SQL Server Native Client 10.0, quando você usa IBCPSession::BCOColFmt para converter SQLDATETIME ou SQLDATETIME em um tipo de cadeia de caracteres, um valor fracionário é exportado. Por exemplo, ao converter o tipo SQLDATETIME para o tipo SQLNVARCHARMAX, versões anteriores do SQL Server Native Client retornaram

1989-02-01 00:00:00. O SQL Server Native Client 10.0 e versões posteriores retornam 1989-02-01 00:00:00.0000000.
O tamanho dos dados enviados deve corresponder ao comprimento especificado em SQL_LEN_DATA_AT_EXEC. Ao usar SQL_LEN_DATA_AT_EXEC, o tamanho dos dados deve corresponder ao comprimento especificado com SQL_LEN_DATA_AT_EXEC. Você pode usá SQL_DATA_AT_EXEC mas há benefícios potenciais de desempenho ao usá SQL_LEN_DATA_AT_EXEC.
Os aplicativos personalizados que usam a API BCP agora podem 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, esse aviso era dado apenas para tipos de caracteres, mas não será emitido para todos os tipos.
Inserir uma cadeia de caracteres vazia em um sql_variant vinculado como um tipo de data/hora gera um erro. No SQL Server Native Client 9.0, inserir uma cadeia de caracteres vazia em um sql_variant vinculado como um tipo de data/hora não gerou um erro. O SQL Server Native Client 10.0 (e posterior) gera corretamente um erro nessa situação.
SQL_C_TYPE _TIMESTAMP mais rigorosa e validação de parâmetros DBTYPE_DBTIMESTAMP. Antes do SQL Server 2008 (10.0.x) Native Client, valores de datetime eram arredondados para se ajustarem à escala de colunas de datetime e smalldatetime pelo SQL Server. O SQL Server 2008 (10.0.x) Native Client (e posterior) aplica as regras de validação mais rígidas definidas na especificação principal ODBC para segundos fracionários. Se um valor de parâmetro não puder ser convertido para o tipo SQL usando a escala especificada ou implícita pela associação do cliente sem truncamento de dígitos à direita, um erro será retornado.
O SQL Server pode retornar resultados diferentes quando um gatilho é executado. As alterações introduzidas no SQL Server 2008 (10.0.x) podem fazer com que um aplicativo tenha resultados diferentes retornados de uma instrução que fez com que um gatilho fosse executado quando NOCOUNT OFF estivesse em vigor. Nessa situação, seu aplicativo pode gerar um erro. Para resolver esse erro, defina NOCOUNT ON no gatilho ou chame SQLMoreResults para avançar para o próximo resultado.

Ver também

de programação do SQL Server Native Client