次の方法で共有


BLOB の取得

バイナリ ラージ オブジェクト (BLOB) は、さまざまな方法で取得できます。 DBTYPE_BYTES を使って BLOB をバイトのシーケンスとして取得したり、ISequentialStream のようなインターフェイスを使用したりできます。 詳しくは、"OLE DB プログラマーズ リファレンス" の BLOB と OLE オブジェクトに関する記事をご覧ください。

次のコードでは、ISequentialStream を使って BLOB を取得する方法を示します。 マクロ BLOB_ENTRY を使うと、インターフェイスとインターフェイスに使うフラグを指定できます。 テーブルを開いた後、コードで ISequentialStream に対して Read を繰り返し呼び出し、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 コンシューマー テンプレート用マクロおよびグローバル関数」の「列マップ マクロ」をご覧ください。

関連項目

アクセサーの使用
OLE DB コンシューマー テンプレート用マクロおよびグローバル関数