Поделиться через


Извлечение двоичного объекта (BLOB)

Извлечь двоичный объект (BLOB) можно разными способами: использовать DBTYPE_BYTES, чтобы извлечь BLOB как последовательность байтов, либо использовать такой интерфейс, как ISequentialStream. Дополнительные сведения см. в разделе Объекты BLOB и COM в справочнике программиста OLE DB.

В следующем примере демонстрируется, как извлечь объект BLOB с помощью методов интерфейса ISequentialStream. Макрос BLOB_ENTRY позволяет указать интерфейс и флаги, используемые для этого интерфейса. После открытия таблицы функция Read интерфейса ISequentialStream вызывается в цикле для последовательного извлечения байтов объекта BLOB. Перед переходом к следующей записи с помощью функции MoveNext вызывается функция Release, освобождающая указатель интерфейса.

class CCategories
{
public:
   ISequentialStream*   pPicture;

BEGIN_COLUMN_MAP(CCategories)
   BLOB_ENTRY(4, IID_ISequentialStream, STGM_READ, pPicture)
END_COLUMN_MAP()
};

CTable<CAccessor<CCategories> > categories;
ULONG          cb;
BYTE            myBuffer[65536];

categories.Open(session, "Categories");
while (categories.MoveNext() == S_OK)
{
   do
   {
      categories.pPicture->Read(myBuffer, 65536, &cb);
      // Do something with the buffer
   } while (cb > 0);
   categories.pPicture->Release();
}

Дополнительные сведения о макросах, обрабатывающих данные BLOB, см. в подразделе "Макросы сопоставления столбцов" раздела Макросы и глобальные функции для шаблонов потребителей OLE DB.

См. также

Основные понятия

Использование методов доступа

Другие ресурсы

Макросы и глобальные функции для шаблонов потребителей OLE DB