Recuperando um BLOB

Você pode recuperar um BLOB (objeto binário grande) de várias maneiras. Você pode usar DBTYPE_BYTES para recuperar o BLOB como uma sequência de bytes ou usar uma interface como ISequentialStream. Para obter mais informações, consulte BLOBS e objetos OLE na referência do programador OLE DB.

O código a seguir mostra como recuperar um BLOB usando ISequentialStream. A macro BLOB_ENTRY permite especificar a interface e os sinalizadores usados para a interface. Depois de abrir a tabela, o código chama Read repetidamente em ISequentialStream para ler bytes do BLOB. O código chama Release para descartar o ponteiro da interface antes de chamar MoveNext para obter o próximo registro.

class CCategories
{
public:
   ISequentialStream* pPicture;

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

Depois, usado pelo seguinte código:

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();
}

Para obter mais informações sobre macros que lidam com dados BLOB, consulte Macros de mapa de colunas em Macros e funções globais para modelos de consumidor OLE DB.

Confira também

Usando acessadores
Macros e funções globais para modelos de consumidor do OLE DB