CORRECÇÃO: O driver ODBC para SQL Server gera erro ao executar um procedimento armazenado no SQL Server 2000

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 286359
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Um aplicativo que usa a interface de programação de aplicativo (API) para chamar um SQL Server 2000 ODBC (Open Database Connectivity) procedimento armazenado que tem um valor de retorno com a função SQLExecDirect() API e abre um cursor na tabela resultante pode retornar os seguintes erros:
szSqlState = "42000," * pfNativeError = 170, * pcbErrorMsg = 81 MessageText = "[Microsoft] [ODBC SQL Server Driver] [SQL Server] linha 1: sintaxe incorreta próxima a '? '."
szSqlState = "42000," * pfNativeError = 16945, * pcbErrorMsg = 75 MessageText = "[Microsoft] [ODBC SQL Server Driver] [SQL Server] O cursor não foi declarado."
Causa
Antes do driver ODBC do SQL Server envia o comando para o SQL Server, ele reestrutura a sintaxe de chamada ODBC para a sintaxe de comando do SQL Server sp_opencursor. No processo de reestruturação o comando, o driver não coloca um espaço após o nome do procedimento armazenado. Por exemplo, chamar esse procedimento faz com que o driver ODBC do SQL Server gerar a seguinte chamada sp_cursoropen.

Esquema de tabela e o procedimento armazenado

create table testtable(f1 integer)gocreate proc testproc@p1 integerasselect * from testtable where f1 = @p1return 2				

Sintaxe de chamada ODBC

{? = call testproc(?)}				

Chamada resultante para o SQL Server 2000

exec sp_cursoropen @P1 output, N' EXEC @P1=testproc@P2? ', @P2 output, @P3 output, @P4 output, N'@P1 int OUTPUT,@P2 int', @P5 output, 1				
Observe que o segundo parâmetro e o nome do procedimento armazenado não tem um espaço entre eles; isso faz com que o erro de sintaxe.
Resolução
Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Data Access Components 2.6. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
300635INFO: Como obter o último MDAC 2.6 Service Pack

Hotfix

A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Date      Time    Version        Size     File name     Platform   -------------------------------------------------------------   02/15/01  5:53P   2000.80.256.0  28,742   Odbcbcp.dll    x86   02/15/01  5:53P   2000.80.256.0  471,119  Sqlsrv32.dll   x86   02/15/01  5:44P   2000.80.256.0  90,112   Sqlsrv32.rll   x86				

Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft Data Access Components 2.6 Service Pack 1.
SQLSRV

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 286359 - Última Revisão: 12/06/2015 00:07:12 - Revisão: 3.3

Microsoft Data Access Components 2.6, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbmdac260sp1fix kbqfe KB286359 KbMtpt
Comentários