Partilhar via


Como buscar colunas usando IRow::GetColumns (ou IRow::Open) e ISequentialStream

Dados grandes podem ser associados ou recuperados usando a interface ISequentialStream. Para colunas associadas, o sinalizador de status DBSTATUS_S_TRUNCATED indica que os dados estão truncados.

O código de exemplo completo está no arquivo FetchColumns.cpp. Você pode baixar um arquivo que contém o exemplo da página de Downloads do SQL Server no MSDN.

Esse exemplo foi desenvolvido com o Microsoft Visual C++ 2005.

O código abaixo cria a tabela de exemplo usada pelo aplicativo.

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
Observação sobre segurançaObservação sobre segurança

Quando possível, use a autenticação do Windows. Se a Autenticação do Windows não estiver disponível, solicite aos usuários que digitem suas credenciais em tempo de execução. Evite armazenar as credenciais em um arquivo. Se for necessário manter as credenciais, criptografe-as com a API de criptografia Win32.

Para buscar colunas usando IRow::GetColumns (ou IRow::Open) e ISequentialStream

  1. Estabeleça uma conexão com a fonte de dados.

  2. Execute o comando (neste exemplo, ICommandExecute::Execute() é chamado com IID_IRow).

  3. Busque os dados da coluna que usam IRow::Open() ou IRow::GetColumns().

    • IRow::Open() pode ser usado para abrir um ISequentialStream na linha. Especifique DBGUID_STREAM para indicar que uma coluna contém um fluxo de dados binários (IStream ou ISequentialStream que pode ser usada para ler os dados da coluna).

    • Caso IRow::GetColumns() seja usado, o elemento pData da estrutura DBCOLUMNACCESS é definido de forma a apontar para um objeto de fluxo.

  4. Use ISequentialStream::Read() repetidamente para ler o número especificado de bytes no buffer de consumidor.

Consulte também

Outros recursos