Как вывести Выборка столбцов с помощью метода IRow::GetColumns (или IRow::Open) и интерфейса ISequentialStream
Большие объемы данных можно привязать или получить с помощью интерфейса ISequentialStream. Для привязанных столбцов флаг состояния DBSTATUS_S_TRUNCATED указывает на факт привязки данных.
Законченный образец кода находится в файле FetchColumns_A.cpp. Архив, содержащий этот пример, можно загрузить на странице Загрузки SQL Server на портале MSDN.
Этот образец создан с помощью Microsoft Visual C++ 2005.
Приведенный ниже код создает таблицу-образец, используемую приложением.
USE AdventureWorksGOIF EXISTS (SELECT name FROM sysobjects WHERE name = 'MyTable') DROP TABLE MyTableGOCREATE 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 MyTablevalues( 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() несколько раз, чтобы прочитать заданное число байтов в буфер потребителя.