你好在那裏研究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