IRow::GetColumns を使用して列をフェッチする方法 (OLE DB)
IRow インターフェイスでは、結果セット内の単一行の列に直接アクセスできます。つまり、IRow では、1 つの行の結果セットから効率的に列を取得できます。
IRow を使用して単一行をフェッチする方法を示したコード サンプルがあります。このサンプルでは、行から一度に 1 つの列を取得します。このサンプルでは、次の方法が示されています。
列のグループを順番にフェッチする方法。
列に 2 回アクセスする方法。列の実際の幅の初回取得以降は、この実際の値がアクセスされます。DBCOLUMNACCESS 構造体では、pData が NULL で cbMaxLen が 0 の場合、IRow->GetColumns() を呼び出すと、列の実際の長さだけが返されます。この場合、IRow->GetColumns() を同じ列に対してもう一度呼び出すと、実際のデータを取得できます。
完全なサンプル コードは、FetchColumns_B.cpp ファイルにあります。このサンプルを含むアーカイブは、MSDN の SQL Server ダウンロード ページからダウンロードできます。
このサンプルは、Microsoft Visual C++ 2005 を使用して開発されています。
FetchColumns_B.cpp で使用されるサンプル テーブルは、次のコードで作成できます。
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
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 を使用して列をフェッチするには
データ ソースへの接続を確立します。
コマンドを実行します (次の例では、ICommandExecute::Execute() が IID_IRow を使用して呼び出されます)。
IRow::GetColumns() を実行し、結果の行の 1 つ以上の列をフェッチします。データをフェッチする前に実際の列サイズを検索する場合は、DBCOLUMNACCES の pData を NULL に設定します。IRow::GetColumns() を呼び出すと、列の幅だけが返されます。IRow::GetColumns() をもう一度呼び出すと、データがフェッチされます。
必要なすべての列にアクセスするまで、IRow::GetColumns() を実行します。列には順番にアクセスする必要があります。