你好在那里研究C和ODBC 我在调用SQLExecDirect函数时出错。 请帮我 这里是代码SQLExecDirect结果-1状态24000在C
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
int main(void)
{
//DB connect example
SQLRETURN nResult = 0;
SQLHANDLE handleEnv = 0;
nResult = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, (SQLHANDLE*)&handleEnv);
//nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC2, SQL_IS_INTEGER);
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
SQLHANDLE handleDBC = 0;
nResult = SQLAllocHandle(SQL_HANDLE_DBC, handleEnv, (SQLHANDLE*)&handleDBC);
SQLCHAR strConnect[ 256 ] = "DSN=MY TEST DB; UID=TESTsa; PWD=TESTpw";
SQLCHAR strConnectOut[ 1024 ] = {0};
SQLSMALLINT nNumOut = 0;
nResult = SQLDriverConnect(handleDBC, NULL, (SQLCHAR*)strConnect, SQL_NTS, (SQLCHAR*)strConnectOut, sizeof(strConnectOut),
&nNumOut, SQL_DRIVER_NOPROMPT);
SQLHSTMT handleStatement = 0;
//nResult = ::SQLAllocStmt(handleDBC, &handleStatement);
nResult = SQLAllocHandle(SQL_HANDLE_STMT, handleDBC, (SQLHANDLE*)&handleStatement);
SQLHSTMT hstmt = handleStatement;
int sqlResultOutput = 0;
SQLINTEGER cbValue = 0;
nResult = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &sqlResultOutput, 0, &cbValue);
//here is the problem
nResult = SQLExecDirect(hstmt, (SQLTCHAR*) "{CALL my_TEST_SP(?)}", SQL_NTS);
//nResult Value is -1 and SQL State is 24000
return 0;
}
每次调用的结果是好的。返回SQL_SUCCESS但都一个 SQLExecDirect函数是返回-1和SQLSTATE 24000
存储过程是简单的像这样
CREATE PROCEDURE my_TEST_SP
@retValue int = 0 output
AS
BEGIN
SET NOCOUNT ON
SET @retValue = 0
SELECT myTestCol
FROM tTestTable
IF @@ERROR <> 0
BEGIN
SET @retValue = -1
END
END
我的操作系统是Windows7的。 使用visual studio 2010 sp1,sqlserver 2012
我想念什么?请告诉我,并有一个美好的一天:)
可能的重复http://stackoverflow.com/questions/3727907/sqlstate-24000-invalid-cursor-state –
对不起,我检查,但我不明白它。但感谢您的评论 –
令人困惑的是,我可以使用'SQL Server的ODBC驱动程序11'和Windows 7上的Visual Studio 2013运行这个稍微修改过的代码(连接字符串,使用SQLWCHAR)就可以很好地对付SQL Server 2014. – erg