Share via


IRow::GetColumns (または IRow::Open) と ISequentialStream を使用して列をフェッチする方法

大きなデータは、ISequentialStream インターフェイスを使用してバインドまたは取得できます。バインドされた列の場合、状態フラグ DBSTATUS_S_TRUNCATED は、データが切り捨てられたことを示します。

完全なサンプル コードは、FetchColumns_A.cpp ファイルにあります。このサンプルを含むアーカイブは、MSDN の SQL Server ダウンロード ページからダウンロードできます。

このサンプルは、Microsoft Visual C++ 2005 を使用して開発されています。

アプリケーションで使用されるサンプル テーブルは、次のコードで作成できます。

USE AdventureWorks2008R2;
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'MyTable')
     DROP TABLE MyTable;
GO

CREATE TABLE MyTable
(
     col1  int,
     col2  varchar(50),
     col3  char(50),
     col4  datetime,
     col5  float,
     col6  money,
     col7  sql_variant,
     col8  binary(50),
     col9  text,
     col10 image
);
GO

/* Enter data. */
INSERT INTO MyTable
values
(
     10,
     'abcdefghijklmnopqrstuvwxyz',
     'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
     '11/1/1999 11:52 AM',
     3.14,
     99.95,
     CONVERT(nchar(50), N'AbCdEfGhIjKlMnOpQrStUvWxYz'),
     0x123456789,
     REPLICATE('AAAAABBBBB', 500),
     REPLICATE(0x123456789, 500)
);
GO
セキュリティに関する注意セキュリティに関する注意

可能な場合は、Windows 認証を使用してください。Windows 認証が使用できない場合は、実行時に資格情報を入力するようユーザーに求めます。資格情報をファイルに保存するのは避けてください。資格情報を保存する必要がある場合は、Win32 Crypto API を使用して暗号化してください。

IRow::GetColumns (または IRow::Open) と ISequentialStream を使用して列をフェッチするには

  1. データ ソースへの接続を確立します。

  2. コマンドを実行します (この例では、ICommandExecute::Execute() が IID_IRow と共に呼び出されます)。

  3. IRow::Open() または IRow::GetColumns() を使用して列データをフェッチします。

    • IRow::Open() を使用すると、この行で ISequentialStream を開くことができます。列にバイナリ データのストリームが含まれることを示す DBGUID_STREAM を指定します (これによって、IStream または ISequentialStream を使用して、列からデータを読み取ることができます)。

    • IRow::GetColumns() を使用すると、DBCOLUMNACCESS 構造体の pData 要素が、ストリーム オブジェクトを指すように設定されます。

  4. ISequentialStream::Read() を繰り返し使用し、指定したバイト数をコンシューマー バッファーに読み込みます。

関連項目

その他の技術情報