Database ODBC problem
Sorry for posting this here but the database forums are totally dead.
Maybe one or two posts a week or so.
I am using VC++ 2005 and am trying to get to an ODBC database.
This is my code:
SQLHENV henv1;
SQLRETURN returnValue;
SQLINTEGER odbcVersion = SQL_OV_ODBC3;
SQLWCHAR SQLState[5];
SQLINTEGER nativeErrorCode;
SQLWCHAR nativeErrorMessage[1000];
SQLSMALLINT nativeErrorMessageLength;
returnValue = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv1);
returnValue =
SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
/* Allocate connection handle */
SQLHDBC hdbc;
SQLHSTMT hstmt;
returnValue = SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc);
returnValue =
SQLConnectA(hdbc,(SQLCHAR*)"PTPGSQL21",9,(SQLCHAR*)"",SQL_NTS,(SQLCHAR*)"",S
QL_NTS);
returnValue = SQLAllocStmt(hdbc,&hstmt);
// Execute the SELECT statement.
SQLUINTEGER NumRowsFetched;
SQLUSMALLINT RowStatusArray[ROW_ARRAY_SIZE];
SQLINTEGER rowArraySize = 10;
typedef struct {SQLUINTEGER gameId; SQLINTEGER gameIdInd;} gameStruct;
gameStruct gamesData[ROW_ARRAY_SIZE];
returnValue = SQLSetStmtAttr(hstmt,
SQL_ATTR_ROW_BIND_TYPE,(void*)sizeof(gameStruct), 0);
returnValue = SQLSetStmtAttr(hstmt,
SQL_ATTR_ROW_ARRAY_SIZE,(void*)rowArraySize, 0);
returnValue = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR,
RowStatusArray,0);
returnValue = SQLSetStmtAttr(hstmt,
SQL_ATTR_ROWS_FETCHED_PTR,&NumRowsFetched, 0);
returnValue = SQLBindCol(hstmt, 1, SQL_C_ULONG, &gamesData[0].gameId,
0,&gamesData[0].gameIdInd);
returnValue = SQLExecDirect(hstmt,(SQLWCHAR *)"SELECT game_id FROM
game",SQL_NTS);
switch (returnValue)
{
case SQL_SUCCESS:
break;
case SQL_SUCCESS_WITH_INFO:
break;
case SQL_ERROR:
SQLError
(henv1,hdbc,hstmt,SQLState,&nativeErrorCode,nativeErrorMessage,1000,&nativeE
rrorMessageLength);
break;
case SQL_INVALID_HANDLE:
SQLGetDiagRec
(SQL_HANDLE_DBC,henv1,1,SQLState,&nativeErrorCode,nativeErrorMessage,1000,&n
ativeErrorMessageLength);
break;
};
All works ok until the SQLExecDirect command. It returns an error: "The # of
binded parameters < the # of parameter markers".
From what I can see I have the parameters. I copied this from an example in
the doumentation so I can't think of anything I left out.
What have I done wrong?
Jonathan Blitz