Как получить BLOB-данные с помощью Oracle ODBC

0

Я пытаюсь получить изображение, которое хранится в BLOB, а затем сохранит его как jpg.

Здесь я извлекаю двоичные данные и сохраняю их в str;

  string str;
  SQLCHAR buf[500] = {0};
  while ((SQL_SUCCEEDED(SQLGetData(StmtHandle, colnum, SQL_C_BINARY, buf, sizeof(buf), NULL))))
  {
     string data(reinterpret_cast< const char* >(buf), reinterpret_cast< const char* >(buf) +    sizeof(buf));
     str = str + data;
  }

Затем я пишу его в файле

ofstream file;  
file.open("C:\\Users\\tom\\Desktop\\img.jpeg");
file << str;
file.close();

и я получаю неправильное изображение.

Что не так с этим методом извлечения данных (я использовал это)?

  • 0
    «И я получаю неправильное изображение.» Это не изображение, которое вы ожидали? Или файл изображения поврежден?
  • 0
    файл изображения поврежден, я не могу открыть его, и двоичные данные этого файла, созданного вручную, отличаются от исходных двоичных данных
Теги:
odbc

1 ответ

0

Я не знаком с программированием ODBC, но на первый взгляд, одна проблема, которую я вижу, заключается в том, что вы предполагаете, что длина ваших данных кратная размеру вашего буфера. Но в последнем чтении не гарантируется возврат точно 500 байтов данных.

Вы должны написать что-то подобное. Может быть:

  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;

Прочтите несколько минут, чтобы просмотреть значения длины/индикатора, чтобы проверить, как используется значение длины/индикатора.

  • 0
    спасибо, я проверил это и теперь использую значение длины / индикатора, но моя проблема все еще не решена
  • 0
    @ Infated Возможно, пришло время сравнить hexdump с вашим файлом данных и ожидаемым содержимым, чтобы точно определить проблему (неправильный размер? Неверные данные? Недостающие байты? Лишние байты? ...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню