Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottenere dati BLOB utilizzando Oracle ODBC

Non ho familiarità con la programmazione ODBC, ma a prima vista, un problema che posso vedere è che presumi che la lunghezza dei tuoi dati sia multipla della dimensione del tuo buffer. Ma non è garantito che l'ultima lettura restituisca esattamente 500 byte di dati.

Dovresti scrivere qualcosa del genere. Forse:

  string str;
  SQLCHAR buf[500];
  SQLLEN cbLeft;      // #bytes remained

  while ((SQL_SUCCEEDED(SQLGetData(StmtHandle, 
                                   colnum, 
                                   SQL_C_BINARY, 
                                   buf, 
                                   sizeof(buf),
                                   &cbLeft))))
  //                               ^^^^^^^
  {
          string data(reinterpret_cast< const char* >(buf),
                      reinterpret_cast< const char* >(buf)
                      + cbLeft);
          //            ^^^^^^
          str = str + data;

Ti preghiamo di dedicare qualche minuto per esaminare Uso della lunghezza /Valori indicatore per verificare come il valore di lunghezza/indicatore viene utilizzato.