我正在尝试在数据库中插入o blob。我已成功输入两列数据。
我遇到SQLParamData问题。当它返回SQL_NEED_DATA时我会返回错误(我会发布代码)
当我运行SQLGetDiagRec时,它返回S1010,错误文本函数序列错误。 我在互联网上搜索这个错误,我了解到它可能与SQLBindParameter中的参数有关。
// Bind the parameter marker.
retCode = retcode = SQLBindParameter(hstmt, // hstmt
1, // ipar
SQL_PARAM_INPUT, // fParamType
SQL_C_BINARY, // fCType
SQL_LONGVARBINARY, // FSqlType
lbytes, // cbColDef
0, // ibScale
&pParmID, // rgbValue
0, // cbValueMax
&cbTextSize); // pcbValue
SqlError(hstmt,SQL_HANDLE_STMT,_T("WriteBlob"), _T("CTLSqlConnection"), _T("SQLBindParameter"));
if(retCode != SQL_SUCCESS)
{
delete pData;
if(!EndTransaction(FALSE))
return ERR_ENDTRANSACTION_FAILED;
else
return -3;
}
//SQLExec
retcode = retCode = SQLExecDirect(hstmt,(SQLTCHAR*)szSqlStat, SQL_NTS);
SQLRETURN ret;
SQLCHAR* SQLState;
SQLINTEGER NativeError;
SQLSMALLINT errmsglen;
SQLCHAR errmsg[255];
SQLCHAR errstate[50];
retCode = SQLParamData(hstmt, &pParmID);
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, (SQLCHAR*)errstate, &NativeError, (SQLCHAR*)errmsg, sizeof(errmsg), &errmsglen);
if(retCode == SQL_NEED_DATA)
{
// Put final batch.
SQLPutData(hstmt, pData, lbytes);
}
else
{
delete pData;
如果这部分代码不够相关,我会发布更多内容。
希望你能帮助我。谢谢。
答案 0 :(得分:0)
你的逻辑在这里看错了。当SQLExecute(SQLExecDirect)返回SQL_NEED_DATA时,您调用SQLParamData,它告诉您需要为SQLPutData提供数据的参数。如果在SQLExecute没有返回SQL_NEED_DATA时调用SQLParamData,我可以想象它是一个函数序列错误。如果你还需要它,我可能会从某个地方挖出一个例子。