IRow::GetColumns (または IRow::Open) と ISequentialStream を使用して列をフェッチする方法
大きなデータは、ISequentialStream インターフェイスを使用してバインドまたは取得できます。バインドされた列の場合、状態フラグ DBSTATUS_S_TRUNCATED は、データが切り捨てられたことを示します。
完全なサンプル コードは、FetchColumns_A.cpp ファイルにあります。このサンプル ファイルを含んでいるアーカイブは、MSDN の SQL Server ダウンロード ページからダウンロードできます。
このサンプルは、Microsoft Visual C++ 2005 を使用して開発されています。
アプリケーションで使用されるサンプル テーブルは、次のコードで作成できます。
USE AdventureWorks
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 を使用して列をフェッチするには
データ ソースへの接続を確立します。
コマンドを実行します (この例では、ICommandExecute::Execute() が IID_IRow と共に呼び出されます)。
IRow::Open() または IRow::GetColumns() を使用して列データをフェッチします。
IRow::Open() を使用すると、この行で ISequentialStream を開くことができます。列にバイナリ データのストリームが含まれることを示す DBGUID_STREAM を指定します (これによって、IStream または ISequentialStream を使用して、列からデータを読み取ることができます)。
IRow::GetColumns() を使用すると、DBCOLUMNACCESS 構造体の pData 要素が、ストリーム オブジェクトを指すように設定されます。
ISequentialStream::Read() を繰り返し使用し、指定したバイト数をコンシューマ バッファに読み込みます。