Abrufen eines BLOBs
Es gibt verschiedene Möglichkeiten zum Abrufen eines Binary Large Object (BLOB). Sie können DBTYPE_BYTES verwenden, um das BLOB als Bytesequenz abzurufen, oder Sie können eine Schnittstelle wie ISequentialStream verwenden. Weitere Informationen finden Sie unter BLOBS und OLE-Objekte in der OLE-Programmierreferenz.
Der folgende Code veranschaulicht, wie Sie ein BLOB mithilfe von ISequentialStream abrufen können. Das Makro BLOB_ENTRY ermöglicht es Ihnen, die Schnittstelle sowie die für die Schnittstelle verwendeten Flags festzulegen. Nach dem Öffnen der Tabelle ruft der Code in ISequentialStream wiederholt Read auf, damit Bytes aus dem BLOB gelesen werden. Der Code ruft Release auf, um den Schnittstellenzeiger zu verwerfen, bevor MoveNext aufgerufen wird, um den nächsten Datensatz zu beziehen.
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();
}
Weitere Informationen zu Makros, mit denen BLOB-Daten behandelt werden können, finden Sie unter "Spaltenzuordnungsmakros" in Makros und globale Funktionen für OLE DB-Consumervorlagen.