Acessando dados XML
Há dois métodos separados de recuperar dados XML de uma fonte de dados: uma usa CStreamRowset e outros usos CXMLAccessor.
Funcionalidade |
CStreamRowset |
CXMLAccessor |
---|---|---|
Quantidade de dados transferidos |
Recupera dados de todas as linhas e colunas de uma só vez. |
Recupera dados de todas as colunas, mas apenas uma linha por vez.Você deve navegar linhas usando métodos como MoveNext. |
A seqüência de caracteres de formatação |
SQL Server formata a cadeia XML e o envia para o consumidor. |
Recupera dados de conjunto de linhas em seu formato nativo (solicitações que o provedor de enviá-lo como cadeias de caracteres Unicode) e cria a cadeia de caracteres que contém os dados no formato XML. |
Controle sobre a formatação |
Você tem algum nível de controle sobre como a seqüência de caracteres XML é formatada, definindo algumas propriedades específicas do SQL Server 2000. |
Você não tem controle sobre o formato da seqüência de caracteres XML gerado. |
Enquanto CStreamRowset fornece uma maneira mais eficiente geral de recuperação de dados em formato XML, só é suportado pelo SQL Server 2000.
Recuperando dados XML usando CStreamRowset
Você especificar CStreamRowset como o tipo de conjunto de linhas no seu CCommand ou CTable declaração.Você pode usá-lo com seus próprios acessadores ou nenhum acessador, por exemplo:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
- ou -
CCommand<CNoAccessor, CStreamRowset> myCmd;
Normalmente quando você chamar CCommand::Open (especificando, por exemplo, CRowset como o TRowset classe), ele obtém um IRowsetponteiro.ICommand::ExecuteRetorna um IRowsetponteiro, que é armazenado na m_spRowset membro de CRowset objeto.Métodos como MoveFirst, MoveNext, e GetData usar esse ponteiro para recuperar os dados.
Por outro lado, quando você chamar CCommand::Open (mas especificar CStreamRowset como o TRowset classe), ICommand::Execute retorna um ISequentialStream ponteiro, que é armazenado na m_spStream membro de dados de CStreamRowset.Em seguida, use o Read método para recuperar os dados (seqüência Unicode) no formato XML.Por exemplo:
myCmd.m_spStream->Read()
SQL Server 2000 executa a formatação do XML e retorna todas as colunas e todas as linhas do conjunto de linhas como uma string XML.
Para um exemplo usando o Read método, consulte "Adicionando suporte de XML para o consumidor" em um consumidor simples de implementar.
Observação |
---|
Suporte a XML usando CStreamRowset funciona somente com o SQL Server 2000 e requer que você tenha o provedor OLE DB para o SQL Server 2000 (instalado com o MDAC). |
Recuperando dados XML usando CXMLAccessor
CXMLAccessor lhe permite acessar dados de uma fonte de dados como dados de seqüência de caracteres quando você não possui conhecimento do esquema do armazenamento de dados.CXMLAccessorfunciona como CDynamicStringAccessorW , exceto que o primeiro converte todos os dados acessados do armazenamento de dados como dados (marcados) formatada em XML.Os nomes de marca XML correspondem os nomes de coluna do armazenamento de dados possível.
Use CXMLAccessor como faria com qualquer outra classe de acessador, passando-o como um parâmetro de modelo para CCommand ou CTable:
CTable<CXMLAccessor, CRowset> rs;
Use GetXMLRowData para recuperar dados de linha de uma tabela por vez e navegue 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 de coluna (tipo de dados) como dados de cadeia de caracteres formatada em XML.