次の方法で共有


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 を使用して列をフェッチするには

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

  2. コマンドを実行します (次の例では、ICommandExecute::Execute() が IID_IRow を使用して呼び出されます)。

  3. IRow::GetColumns() を実行し、結果の行の 1 つ以上の列をフェッチします。データをフェッチする前に実際の列サイズを検索する場合は、DBCOLUMNACCES の pData を NULL に設定します。IRow::GetColumns() を呼び出すと、列の幅だけが返されます。IRow::GetColumns() をもう一度呼び出すと、データがフェッチされます。

  4. 必要なすべての列にアクセスするまで、IRow::GetColumns() を実行します。列には順番にアクセスする必要があります。

関連項目

その他の技術情報