Récupération d'un BLOB
Vous pouvez récupérer un objet de type BLOB (Binary Large Object) de diverses manières. Vous pouvez utiliser DBTYPE_BYTES pour récupérer le BLOB en tant que séquence d'octets, ou recourir à une interface de type ISequentialStream. Pour plus d'informations, consultez BLOBS et objets OLE dans le Guide de référence du programmeur OLE DB.
Le code suivant montre comment récupérer un BLOB en utilisant ISequentialStream. La macro BLOB_ENTRY vous permet de spécifier l'interface et les indicateurs utilisés pour l'interface. Après avoir ouvert la table, le code appelle Read à maintes reprises sur ISequentialStream pour lire les octets à partir du BLOB. Le code appelle Release pour supprimer le pointeur de l'interface avant d'appeler MoveNext pour obtenir l'enregistrement suivant.
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();
}
Pour plus d'informations sur les macros qui gèrent les données BLOB, consultez « Macros de table de colonnes » dans Macros et fonctions globales pour les modèles du consommateur OLE DB.