BLOB と OLE オブジェクト

SQL Server Native Client OLE DB プロバイダーで公開されている ISequentialStream インターフェイスにより、コンシューマーはバイナリ ラージ オブジェクト (BLOB) として SQL Server の ntext 型、text 型、image 型、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、および XML 型にアクセスできます。ISequentialStreamRead メソッドを使用すると、扱いやすい単位で大量のデータを取得できます。

この機能を示すサンプルについては、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) としてキャッシュされ、それらに任意の順序でアクセスできます。