BLOB の取得
バイナリ ラージ オブジェクト (BLOB: Binary Large Object) は、さまざまな方法で取得できます。DBTYPE_BYTES を使用して、BLOB をバイト シーケンスとして取得できます。または、ISequentialStream などのインターフェイスを使用できます。詳細については、『OLE Programmer's Reference』の「BLOBS and OLE Objects」を参照してください。
以下のコードでは、ISequentialStream を使用して BLOB を取得する方法を示しています。BLOB_ENTRY マクロでは、インターフェイスと、インターフェイスに使用するフラグを指定できます。テーブルを開いた後で、ISequentialStream に対して Read を繰り返し呼び出して、BLOB からバイトを読み込みます。MoveNext を呼び出して次のレコードを取得する前に、Release を呼び出してインターフェイス ポインターを破棄します。
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 コンシューマー テンプレート用マクロおよびグローバル関数」の「列マップ マクロ」を参照してください。