ODBC SQLParamData返回数据

时间:2012-09-27 13:42:01

标签: c++ sql oracle odbc

我正在尝试在数据库中插入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;

如果这部分代码不够相关,我会发布更多内容。

希望你能帮助我。谢谢。

1 个答案:

答案 0 :(得分:0)

你的逻辑在这里看错了。当SQLExecute(SQLExecDirect)返回SQL_NEED_DATA时,您调用SQLParamData,它告诉您需要为SQLPutData提供数据的参数。如果在SQLExecute没有返回SQL_NEED_DATA时调用SQLParamData,我可以想象它是一个函数序列错误。如果你还需要它,我可能会从某个地方挖出一个例子。