Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

FIX: SQL Server ODBC Driver Generates Error When Executing a Stored Procedure on SQL Server 2000


View products that this article applies to.

This article was previously published under Q286359

↑ Back to the top


Symptoms

An application that uses the Open Database Connectivity (ODBC) application programming interface (API) to call a SQL Server 2000 stored procedure that has a return value with the SQLExecDirect() API function and open a cursor on the resulting table may return the following errors:
szSqlState = "42000", *pfNativeError = 170, *pcbErrorMsg = 81 MessageText = "[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '?'."
szSqlState = "42000", *pfNativeError = 16945, *pcbErrorMsg = 75 MessageText = "[Microsoft][ODBC SQL Server Driver][SQL Server]The cursor was not declared."

↑ Back to the top


Cause

Before the SQL Server ODBC driver sends the command to the SQL Server, it restructures the ODBC call syntax to the SQL Server sp_opencursor command syntax. In the process of restructuring the command, the driver does not put a space after the name of the stored procedure. For example, calling this stored procedure causes the SQL Server ODBC driver to generate the following sp_cursoropen call.

Table Schema and Stored Procedure

create table testtable
(f1 integer)
go
create proc testproc
@p1 integer
as
select * from testtable where f1 = @p1
return 2
				

ODBC Call Syntax

{? = call testproc(?)}
				

Resulting Call to 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
				
Note that the second parameter and the name of the stored procedure do not have a space between them; this causes the syntax error.

↑ Back to the top


Resolution

To resolve this problem, obtain the latest service pack for Microsoft Data Access Components 2.6. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:
300635� INFO: How to Obtain the Latest MDAC 2.6 Service Pack

Hotfix

The English version of this fix should have the following file attributes or later:
   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
				

↑ Back to the top


Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was first corrected in Microsoft Data Access Components 2.6 Service Pack 1.

↑ Back to the top


Keywords: KB286359, kbqfe, kbmdac260sp1fix, kbfix, kbbug, kbqfe, kbhotfixserver

↑ Back to the top

Article Info
Article ID : 286359
Revision : 6
Created on : 9/26/2005
Published on : 9/26/2005
Exists online : False
Views : 172