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