Compartir por


Recuperar un objeto BLOB

Puede recuperar un objeto binario grande (BLOB) de varias maneras. Puede usar DBTYPE_BYTES para recuperar el BLOB como una secuencia de bytes o usar una interfaz como ISequentialStream. Para obtener más información, vea BLOBS y objetos OLE en la Referencia del programador de OLE DB.

En el código siguiente se muestra cómo recuperar un BLOB mediante ISequentialStream. La macro BLOB_ENTRY permite especificar la interfaz y las marcas usadas para la interfaz. Después de abrir la tabla, el código llama a Read repetidamente en ISequentialStream para leer bytes del BLOB. El código llama a Release para eliminar el puntero de interfaz antes de llamar a MoveNext para obtener el siguiente registro.

class CCategories
{
public:
   ISequentialStream* pPicture;

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

Luego, lo usa el código siguiente:

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 obtener más información sobre las macros que controlan los datos BLOB, vea Macros de asignación de columnas en Macros y funciones globales para las plantillas de consumidor OLE DB.

Consulte también

Usar descriptores de acceso
Macros y funciones globales para las plantillas de consumidor OLE DB