BLOB と OLE オブジェクト

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB ドライバーのダウンロード

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

[1]:ISequentialStream インターフェイスを使用して UTF-8 でエンコードされたデータをレガシ テキスト列に挿入することは、UTF-8 をサポートするサーバーのみに制限されます。 UTF-8 をサポートしていないサーバーをターゲットにしてこのシナリオを実行しようとすると、ドライバーによって次のエラー メッセージが送信されます。"選択された列の型上でストリームはサポートされていません"。

この機能を示すサンプルについては、「大きなデータの設定 (OLE DB)」を参照してください。

コンシューマーからデータ変更用にバインドされたアクセサーにインターフェイス ポインターを渡すとき、OLE DB Driver for SQL Server は、コンシューマーに実装された IStorage インターフェイスを使用できます。

大きな値データ型の場合、OLE DB Driver for SQL Server では、IRowset インターフェイスや DDL インターフェイスで型の想定サイズの確認が行われます。 varchar 型、nvarchar 型、および varbinary データ型の列の最大サイズが無制限に設定されている場合、列のデータ型を返すスキーマ行セットおよびインターフェイスによって列は ISLONG と表されます。

OLE DB Driver for SQL Server では、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 ストリーム機能が使用されます。 OLE DB Driver for SQL Server では、大きな値データ型の DBTYPE_IUNKNOWN としての出力パラメーターのバインドがサポートされます。 これは、DBTYPE_IUNKNOWN としてクライアントに返されるこれらのデータ型を、ストアド プロシージャが戻り値として返すシナリオをサポートするものです。

ストレージ オブジェクトの制限事項

  • OLE DB Driver for SQL Server でサポートされる、開いているストレージ オブジェクトは 1 つのみです。 複数の ISequentialStream インターフェイス ポインターへの参照を取得するために、複数のストレージ オブジェクトを開こうとすると、DBSTATUS_E_CANTCREATE が返されます。

  • OLE DB Driver for SQL Server の読み取り専用プロパティ DBPROP_BLOCKINGSTORAGEOBJECTS の既定値は VARIANT_TRUE です。 そのため、ストレージ オブジェクトがアクティブの場合は、(ストレージ オブジェクト以外の) 一部のメソッドが失敗して E_UNEXPECTED が返されます。

  • コンシューマーに実装されたストレージ オブジェクトを参照する行アクセサーを作成するときは、そのオブジェクトのデータ長を OLE DB Driver for SQL Server 側で認識しておく必要があります。 コンシューマー側では、アクセサーの作成に使用する DBBINDING 構造体に長さのインジケーターをバインドする必要があります。

  • 行に 1 つの大きなデータ値とそれ以外のデータが格納されていて、DBPROP_ACCESSORDER が DBPROPVAL_AO_RANDOM ではない場合は、OLE DB Driver for SQL Server のカーソルに対応した行セットを使用して行のデータを取得するか、すべての大きなデータ値を処理してから行の他の値を取得する必要があります。 DBPROP_ACCESSORDER が DBPROPVAL_AO_RANDOM の場合、OLE DB Driver for SQL Server によりすべての XML データ型がバイナリ ラージ オブジェクト (BLOB) としてキャッシュされ、それらに任意の順序でアクセスできます。

このセクションの内容

参照

OLE DB Driver for SQL Server のプログラミング
大きな値の型の使用