Share via


BLOB と OLE オブジェクト

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

コンシューマからデータ変更用にバインドされたアクセサにインターフェイス ポインタを渡すとき、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)
大きな値をとるデータ型の使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手