如何:使用 IRow::GetColumns 提取列 (OLE DB)

通过 IRow 接口可以直接访问结果集中单一行的列。因而,IRow 是一种从具有一行的结果集中检索列的有效方法。

所提供的代码示例显示如何使用 IRow 提取单一行。在本示例中,将一次从该行中检索一列。此示例说明:

  • 如何提取一组列(依次)。

  • 如何两次访问某一列。第一次获取实际列宽度,稍后访问实际数据。在 DBCOLUMNACCESS 结构中,如果 pData 为 NULL 且 cbMaxLen 为 0,则对于 IRow->GetColumns() 的调用只返回实际列长度。在这种情况下,可以再次对同一列调用 IRow->GetColumns(),以检索实际数据。

完整示例代码在 FetchColumns_B.cpp 文件中。可以从 MSDN 上的 SQL Server Downloads(SQL Server 下载)页下载包含此示例的存档。

该示例是使用 Microsoft Visual C++ 2005 开发的。

以下代码创建由 FetchColumns_B.cpp 使用的示例表。

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
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(Win32 加密 API)加密它们。

使用 IRow::GetColumns 提取列

  1. 建立与数据源的连接。

  2. 执行命令(在以下示例中,将通过 IID_IRow 调用 ICommandExecute::Execute())。

  3. 执行 IRow::GetColumns() 以提取结果行中的一列或多列。如果您要在提取数据之前查找实际列大小,请将 DBCOLUMNACCESS 中的 pData 设置为 NULL。对于 IRow::GetColumns() 的这一调用只返回列宽度。再次调用 IRow::GetColumns() 将提取数据。

  4. 执行 IRow::GetColumns(),直到访问您需要的所有列。必须依次访问这些列。

请参阅

其他资源