0

我正在尝试在数据库中插入 o blob。我已经成功输入了两列数据。

我遇到了 SQLParamData 问题。它应该返回 SQL_NEED_DATA 时返回错误(我将发布代码)

当我运行 SQLGetDiagRec 时,它返回带有错误文本 Function sequence error 的 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;

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

希望你能帮助我。谢谢。

4

1 回答 1

0

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

于 2012-09-27T14:16:43.823 回答