Como buscar colunas usando IRow::GetColumns (OLE DB)
A interface IRow permite acesso direto a colunas de uma única linha no conjunto de resultados. Portanto, IRow é um modo eficiente de recuperar colunas de um conjunto de resultados com uma linha.
Mais adiante está um exemplo de código que mostra como buscar uma única linha usando IRow. Nesse exemplo, uma coluna de cada vez é recuperada da linha. O exemplo mostra:
Como buscar um grupo de colunas (em seqüência).
Como acessar uma coluna duas vezes. Na primeira vez a largura da coluna real é obtida, e depois os dados reais são acessados. Na estrutura DBCOLUMNACCESS, se pData for NULL e cbMaxLen for 0, a chamada para IRow->GetColumns() retornará somente o comprimento de coluna real. Nesse caso, IRow->GetColumns() poderá ser chamado novamente na mesma coluna para recuperar os dados reais.
O exemplo de código completo está no arquivo FetchColumns_B.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 a seguir cria a tabela de exemplo usada por FetchColumns_B.cpp.
USE AdventureWorks
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
Observaçã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
Estabeleça uma conexão com a fonte de dados.
Execute o comando (no exemplo a seguir, ICommandExecute::Execute() é chamado com IID_IRow).
Execute IRow::GetColumns() para buscar uma ou mais colunas na linha resultante. Se você desejar localizar o tamanho de coluna real antes de buscar os dados, defina pData em DBCOLUMNACCESS como NULL. A chamada para IRow::GetColumns() retorna somente a largura da coluna. Outra chamada para IRow::GetColumns() buscará os dados.
Execute IRow::GetColumns() até que todas as colunas necessárias sejam acessadas. As colunas precisam ser acessadas em seqüência.