擷取 BLOB
您可以透過各種方式擷取二進位大型物件 (BLOB)。 您可以使用 DBTYPE_BYTES
來擷取 BLOB 作為位元組序列,或使用類似的 ISequentialStream
介面。 如需詳細資訊,請參閱 OLE DB 程式設計人員參考中的 BLOBS 和 OLE 物件。
下列程式代碼示範如何使用 擷取 BLOB ISequentialStream
。 巨集BLOB_ENTRY可讓您指定介面和介面所使用的旗標。 開啟數據表之後,程式代碼會重複呼叫 Read
ISequentialStream
,以從 BLOB 讀取位元組。 程序代碼會先呼叫 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 消費者範本的巨集和全域函式中的數據行對應巨集。