sql >> Base de Datos >  >> RDS >> Oracle

Cómo obtener datos BLOB usando Oracle ODBC

No estoy familiarizado con la programación ODBC, pero a primera vista, un problema que puedo ver es que asume que la longitud de sus datos es múltiplo del tamaño de su búfer. Pero no se garantiza que la última lectura devuelva exactamente 500 bytes de datos.

Deberías escribir algo así. Tal vez:

  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;

Tómese unos minutos para revisar Uso de longitud /Valores del indicador para comprobar cómo el valor de longitud/indicador se utiliza.