2012-09-27 23 views
0

我試圖在數據庫中插入o blob。我已成功輸入兩列數據。ODBC SQLParamData返回數據

我有絲毫的問題。它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

你的邏輯在這裏看起來不對。這是什麼時候SQLExecute(SQLExecDirect)返回你調用SQLParamData的SQL_NEED_DATA,它告訴你將需要爲SQLPutData提供數據的參數。如果在SQLExecute沒有返回SQL_NEED_DATA時調用SQLParamData,我可以想象它是一個函數序列錯誤。如果你仍然需要的話,我可以從某處挖掘出一個例子。

+0

謝謝。如果你能給我一個例子,這將是非常有益的。再次感謝。 –

+0

http://cpansearch.perl.org/src/MJEVANS/DBD-ODBC-1.40_2/dbdimp.c搜索SQL_ParamData。它基本上調用SQLExecute或SQLExecDirect,並且如果返回SQL_NEED_DATA,它將調用SQLParamData來查找哪個綁定參數是必需的,然後調用SQLPutData來發送參數。 – bohica