Как выбрать столбцы с помощью метода IRow::GetColumns (или IRow::Open) и интерфейса ISequentialStream
Большие объемы данных можно привязать или получить с помощью интерфейса ISequentialStream. Для привязанных столбцов флаг состояния DBSTATUS_S_TRUNCATED указывает на факт усечения данных.
Полный образец кода см. в файле FetchColumns_A.cpp. Архив, содержащий этот образец, можно загрузить на странице загрузок SQL Server MSDN.
Этот образец создан с помощью Microsoft Visual C++ 2005.
Приведенный ниже код создает образец таблицы, используемой этим приложением.
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
/* Enter data. */
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 (или IRow::Open) и ISequentialStream
Установите соединение с источником данных.
Выполните команду (в данном примере команда ICommandExecute::Execute() вызывается с помощью IID_IRow).
Получите столбец данных с помощью методов IRow::Open() или IRow::GetColumns().
С помощью метода IRow::Open() можно открыть поток ISequentialStream для данной строки. Задайте параметр DBGUID_STREAM, чтобы указать, что столбец содержит поток двоичных данных; после этого можно прочитать данные из столбца с помощью метода IStream или ISequentialStream.
Если используется метод IRow::GetColumns(), элементу pData структуры DBCOLUMNACCESS присваивается значение указателя на объект потока.
Используйте метод ISequentialStream::Read() несколько раз, чтобы считать заданное число байтов в буфер потребителя.