如何:使用 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 提取列
建立与数据源的连接。
执行命令(在以下示例中,将通过 IID_IRow 调用 ICommandExecute::Execute())。
执行 IRow::GetColumns() 以提取结果行中的一列或多列。如果您要在提取数据之前查找实际列大小,请将 DBCOLUMNACCESS 中的 pData 设置为 NULL。对于 IRow::GetColumns() 的这一调用只返回列宽度。再次调用 IRow::GetColumns() 将提取数据。
执行 IRow::GetColumns(),直到访问您需要的所有列。必须依次访问这些列。