レコードセット: 大量のデータの処理 (ODBC)

このトピックの内容は、MFC ODBC クラスと MFC DAO クラスの両方に該当します。

Note

MFC DAO クラスを使用している場合は、CLongBinary クラスではなく CByteArray クラスを使用して大量のデータ項目を管理します。 一括行フェッチで MFC ODBC クラスを使用している場合は、CByteArray ではなく CLongBinary を使用します。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。

たとえば、ビットマップ (従業員の写真、地図、製品の画像、OLE オブジェクトなど) などの大きなデータをデータベースに格納できるとします。 多くの場合、この種のデータは、次の理由でバイナリ ラージ オブジェクト (または BLOB) と呼ばれます。

  • 各フィールド値が大きい。

  • 数値や他の単純なデータ型とは異なり、予測可能なサイズがない。

  • プログラムの観点ではデータの形がない。

このトピックでは、このようなオブジェクトを操作するためにデータベース クラスが提供するサポートについて説明します。

ラージ オブジェクトの管理

レコードセットには、バイナリ ラージ オブジェクトを管理する際の特殊な問題を解決する方法が 2 つあります。 CByteArray クラスまたは CLongBinary クラスを使用できます。 一般に、CByteArray は大きなバイナリ データを管理するために推奨される方法です。

CByteArray クラス」に示すとおり、CByteArray には CLongBinary よりも多くのオーバーヘッドが必要ですが、より高機能です。 CLongBinary については、「CLongBinary クラス」で簡単に説明します。

CByteArray を使用して大量のデータ項目を操作する方法の詳細については、テクニカル ノート 45 を参照してください。

CByteArray クラス

CByteArray は MFC コレクション クラスの 1 つです。 CByteArray オブジェクトは、バイトの動的配列を格納します。この配列は必要に応じて拡張できます。 このクラスは、組み込みの C++ 配列と同様に、インデックスによる高速アクセスを提供します。 CByteArray オブジェクトは、診断の目的でシリアル化およびダンプできます。 このクラスは、指定したバイトの取得と設定、バイトの挿入と追加、および 1 バイトまたはすべてのバイトの削除を行うメンバー関数を提供します。 これらの機能を使用すると、バイナリ データを簡単に解析できるようになります。 たとえば、バイナリ オブジェクトが OLE オブジェクトの場合、実際のオブジェクトに到達するには、いくつかのヘッダー バイトを処理しなければならない可能性があります。

レコードセットでの CByteArray の使用

レコードセットのフィールド データ メンバーに CByteArray 型を指定することで、RFX がレコードセットとデータ ソースの間でこのようなオブジェクトの転送を管理できる固定ベースを提供します。また、このベースを使用して、オブジェクト内のデータを操作できます。 RFX では取得されたデータ用の特定のサイトが必要です。また、ユーザーが基になるデータにアクセスする方法が必要です。

CByteArray を使用して大量のデータ項目を操作する方法の詳細については、テクニカル ノート 45 を参照してください。

CLongBinary クラス

CLongBinary オブジェクトは、ヒープで割り当てられたストレージのブロックへの HGLOBAL ハンドルを中心とした単純なシェルです。 バイナリ ラージ オブジェクトを含むテーブル列をバインドする際、RFX は、データをレコードセットに転送する必要があるときに HGLOBAL ハンドルを割り当て、レコードセットの CLongBinary フィールドにハンドルを格納します。

次に、HGLOBAL ハンドルである m_hData を使用してデータ自体を処理し、ハンドル データの場合と同様に操作します。 ここで、CByteArray によって機能が追加されます。

注意事項

CLongBinary オブジェクトを関数呼び出しでパラメーターとして使用することはできません。 さらに、このオブジェクトの実装で ::SQLGetData を呼び出す場合は、スクロール可能なスナップショットのスクロール パフォーマンスが必然的に低下します。 これは、自分で ::SQLGetData の呼び出しを使用して動的スキーマ列を取得する場合にも当てはまる場合があります。

関連項目

レコードセット (ODBC)
レコードセット: 集計値の計算 (ODBC)
レコード フィールド エクスチェンジ (RFX)