Acessando dados XML
Há dois métodos diferentes para recuperação de dados XML de uma fonte de dados: um usa CStreamRowset e o outro usa CXMLAccessor.
Funcionalidade | CStreamRowset | CXMLAccessor |
---|---|---|
Quantidade de dados transferidos | Recupera dados de todas as colunas e linhas de uma só vez. | Recupera dados de todas as colunas, mas apenas uma linha por vez. Você deve navegar pelas linhas usando métodos como MoveNext . |
Formatação da cadeia de caracteres | O SQL Server formata a cadeia de caracteres XML e a envia ao consumidor. | Recupera os dados do conjunto de linhas em seu formato nativo (solicita que o provedor os envie como cadeias de caracteres Unicode) e, em seguida, compila a cadeia de caracteres que contém os dados no formato XML. |
Controle sobre formatação | Você tem algum nível de controle sobre como a cadeia de caracteres XML é formatada definindo algumas propriedades específicas do SQL Server 2000. | Você não tem controle sobre o formato da cadeia de caracteres XML gerada. |
Embora CStreamRowset
forneça uma forma mais eficiente de recuperar dados no formato XML, ela só tem suporte no SQL Server 2000.
Recuperar dados XML usando CStreamRowset
Especifique CStreamRowset como o tipo de conjunto de linhas em sua declaração CCommand
ou CTable
. Você pode usá-lo com seu próprio acessador ou sem nenhum acessador, por exemplo:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-ou-
CCommand<CNoAccessor, CStreamRowset> myCmd;
Normalmente, quando você chama CCommand::Open
(especificando, por exemplo, CRowset
como a classe TRowset
), ele obtém um ponteiro IRowset
. ICommand::Execute
retorna um ponteiro IRowset
, que é armazenado no membro m_spRowset
do objeto CRowset
. Métodos como MoveFirst
, MoveNext
e GetData
usam esse ponteiro para recuperar os dados.
Por outro lado, quando você chama CCommand::Open
(mas especifica CStreamRowset
como a classe TRowset
), ICommand::Execute
retorna um ponteiro ISequentialStream
, que é armazenado no m_spStream
membro de dados do CStreamRowset. Em seguida, você usa o método Read
para recuperar os dados (cadeia de caracteres Unicode) no formato XML. Por exemplo:
myCmd.m_spStream->Read()
O SQL Server 2000 faz a formatação XML e retorna todas as colunas e todas as linhas do conjunto de linhas como uma cadeia de caracteres XML.
Para ver um exemplo usando o método Read
, confira Adicionar suporte XML ao Consumidor em Implementação de um Consumidor Simples.
Observação
O suporte a XML usando CStreamRowset
funciona apenas com o SQL Server 2000 e exige que você tenha o Provedor OLE DB para o SQL Server 2000 (instalado com o MDAC).
Recuperar dados XML usando o CXMLAccessor
O CXMLAccessor permite que você acesse dados de uma fonte de dados como dados de cadeia de caracteres quando não tiver conhecimento do esquema do armazenamento de dados. O CXMLAccessor
funciona de modo semelhante ao CDynamicStringAccessorW
, exceto que essa classe converte todos os dados acessados do armazenamento de dados como dados formatados em XML (marcados). Os nomes de marca XML correspondem aos nomes de coluna do armazenamento de dados o máximo possível.
Use CXMLAccessor
como faria com qualquer outra classe de acessador, passando-a como um parâmetro de modelo para CCommand
ou CTable
:
CTable<CXMLAccessor, CRowset> rs;
Use GetXMLRowData para recuperar dados da tabela uma linha de cada vez e navegar nas linhas usando métodos como MoveNext
, por exemplo:
// Open data source, session, and rowset
hr = rs.MoveFirst();
while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
CStringW strRowData;
myCmd.GetXMLRowData(strRowData);
printf_s( "%S\n", strRowData );
hr = rs.MoveNext();
}
Você pode usar GetXMLColumnData para recuperar as informações da coluna (tipo de dados) como dados de cadeia de caracteres formatadas em XML.