Как выбрать столбцы при помощи метода IRow::GetColumns (OLE DB)
Интерфейс IRow обеспечивает прямой доступ к столбцам одной строки в результирующем наборе. Таким образом, IRow является эффективным способом получения столбцов из результирующего набора из одной строки.
Имеется образец кода, в котором показано получение одной строки с помощью IRow. В этом образце из строки за один раз извлекается один столбец. В образце показано следующее.
Как получить группу столбцов (последовательно).
Как дважды получить доступ к столбцу. В первый раз узнается фактическая ширина столбца, а затем осуществляется доступ к данным. В структуре DBCOLUMNACCESS, если pData имеет значение NULL, а cbMaxLen = 0, вызов IRow->GetColumns() возвращает только фактическую длину столбца. В этом случае IRow->GetColumns() можно вызвать снова для того же столбца, чтобы получить данные.
Полный образец кода находится в файле FetchColumns_B.cpp. Архив, содержащий этот образец, можно загрузить на странице загрузок SQL Server MSDN.
Этот образец создан с помощью 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 недоступна, запросите у пользователя ввод учетных данных во время выполнения. Избегайте хранения учетных данных в файле. Если необходимо сохранить учетные данные, зашифруйте их с помощью API-интерфейса шифрования Win32. |
Получение столбцов с помощью IRow::GetColumns
Установите соединение с источником данных.
Выполните команду (в следующем примере ICommandExecute::Execute() вызывается с идентификатором IID_IRow).
Вызовите функцию IRow::GetColumns() для извлечения одного или нескольких столбцов из полученной строки. Если перед получением данных нужно определить фактический размер столбца, присвойте pData в структуре DBCOLUMNACCESS значение NULL. Вызов IRow::GetColumns() возвращает только ширину столбца. Еще один вызов IRow::GetColumns() получает данные.
Выполняйте функцию IRow::GetColumns(), пока не получите данные из всех нужных столбцов. Доступ к столбцами должен осуществляться последовательно.