Извлечение двоичного объекта (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