BLOB と OLE オブジェクト
SQL Native Client OLE DB プロバイダで公開されている ISequentialStream インターフェイスにより、コンシューマはバイナリ ラージ オブジェクト (BLOB) として SQL Server の ntext 型、text 型、image 型、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、および XML 型にアクセスできます。ISequentialStream の Read メソッドを使用すると、扱いやすい単位で大量のデータを取得できます。
コンシューマからデータ変更用にバインドされたアクセサにインターフェイス ポインタを渡すとき、SQL Native Client OLE DB プロバイダは、コンシューマに実装された IStorage インターフェイスを使用できます。
大きな値データ型の場合、IRowset インターフェイスや DDL インターフェイスで型のサイズの想定が確認されます。varchar 型、nvarchar 型、および varbinary 型の列の最大サイズが無制限に設定されている場合、列のデータ型を返すスキーマ行セットおよびインターフェイスによって列は ISLONG と表されます。
SQL Native Client OLE DB プロバイダでは、varchar(max) 型、varbinary(max) 型、および nvarchar(max) 型が、それぞれ DBTYPE_STR、DBTYPE_BYTES、および DBTYPE_WSTR として公開されます。
このようなデータ型を使用して作業するために、アプリケーションでは次のような操作を行えます。
- データ型 DBTYPE_STR、DBTYPE_BYTES、または DBTYPE_WSTR としてバインドします。バッファのサイズが十分でない場合、これらのデータ型は以前のリリースでの動作と同様に (以前よりも大きな値を格納できるようになりましたが)、切り捨てが行われます。
- データ型としてバインドし、DBTYPE_BYREF も指定します。
- DBTYPE_IUNKNOWN としてバインドし、ストリーミングを使用します。
DBTYPE_IUNKNOWN にバインドすると、ISequentialStream ストリーム機能が使用されます。SQL Native Client OLE DB プロバイダでは、大きな値データ型の出力パラメータを DBTYPE_IUNKNOWN としてバインドすることがサポートされます。これにより、ストアド プロシージャからクライアントに、DBTYPE_IUNKNOWN で公開される戻り値として大きな値データ型を返すようなシナリオが容易に実現できます。
詳細については、次のトピックを参照してください。
ストレージ オブジェクトの制限事項
- SQL Native Client OLE DB プロバイダでサポートされる、開いているストレージ オブジェクトは 1 つのみです。複数の ISequentialStream インターフェイス ポインタへの参照を取得するために、複数のストレージ オブジェクトを開こうとすると、DBSTATUS_E_CANTCREATE が返されます。
- SQL Native Client OLE DB プロバイダの読み取り専用プロパティ DBPROP_BLOCKINGSTORAGEOBJECTS の既定値は VARIANT_TRUE です。この値は、ストレージ オブジェクトがアクティブである場合に、(ストレージ オブジェクト以外の) 一部のメソッドが失敗して E_UNEXPECTED が返されることを示します。
- コンシューマに実装されたストレージ オブジェクトを参照する行アクセサを作成するときは、そのオブジェクトのデータ長を SQL Native Client OLE DB プロバイダ側で認識しておく必要があります。コンシューマ側では、アクセサの作成に使用する DBBINDING 構造体に長さのインジケータをバインドする必要があります。
- 行に 1 つの大きなデータ値とそれ以外のデータが格納されていて、DBPROP_ACCESSORDER が DBPROPVAL_AO_RANDOM ではない場合は、SQL Native Client OLE DB プロバイダのカーソルに対応した行セットを使用して行のデータを取得するか、すべての大きなデータ値を処理してから行の他の値を取得する必要があります。DBPROP_ACCESSORDER が DBPROPVAL_AO_RANDOM の場合、SQL Native Client OLE DB プロバイダによりすべての XML データ型がバイナリ ラージ オブジェクト (BLOB) としてキャッシュされ、それらに任意の順序でアクセスできます。
参照
概念
SQL Native Client (OLE DB)
大きな値をとるデータ型の使用