SQLBindParameter возвращает 99 (SQL_NEED_DATA) - PullRequest
0 голосов
/ 12 апреля 2020

Я ссылался на аналогичный вопрос SQLBindParameter и SQLExecute возвращает SQL_NEED_DATA и MSDN. Но я получу ошибку при запуске его «правильного» кода. Я не знаю, где я сделал не так, пожалуйста, помогите мне.

Я пишу ODB C и C ++, код:

mRet = SQLAllocStmt(mConn, &st);//return 0
SQLINTEGER tgt = 1;
SQLINTEGER P;
SQLCHAR sql[] = "select fortest3(?);";
mRet = SQLPrepare(st, sql, SQL_NTS);//return 0
mRet = SQLBindParameter(st, 1, //return 0
    SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 
    sizeof(int), sizeof(int), &tgt, sizeof(int), &P);
//also tried (..., 0, 0,&tgt,0,&P)
//also tried (..., 0, 0,&tgt,sizeof(int),&P)
//also tried (..., 10, 0,&tgt,0,&P) 
//as MSDN said 10 is the precision of integer in mysql
mRet = SQLExecute(st);//return 99

где fortest3 (d целое число) возвращает d + 1 . Проблема в точности возникает при запуске SQLExecute. Тем не менее, все работает нормально, если использовать

SQLExecDirect(st,(SQLCHAR*)"select fortest3(11);",SQL_NTS);
...