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


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

Двоичный большой объект (BLOB) можно получить различными способами. Вы можете использовать DBTYPE_BYTES для извлечения BLOB-объекта в виде последовательности байтов или использовать такой ISequentialStreamинтерфейс. Дополнительные сведения см. в разделе BLOBS и ОБЪЕКТОВ OLE в справочнике программиста OLE DB.

В следующем коде показано, как получить BLOB-объект с помощью ISequentialStream. Макрос BLOB_ENTRY позволяет указать интерфейс и флаги, используемые для интерфейса. После открытия таблицы код неоднократно ISequentialStream вызывается Read для чтения байтов из БОЛЬШОго двоичного объекта. Код вызывает Release удаление указателя интерфейса перед вызовом MoveNext для получения следующей записи.

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