Acessando dados XML
Há dois métodos separados de recuperação de dados XML de uma fonte de dados: uma usa CStreamRowset e a Outros usa CXMLAccessor.
Funcionalidade |
CStreamRowset |
CXMLAccessor |
---|---|---|
Quantidade de dados transferidos |
Recupera dados de todas as colunas e linhas ao mesmo tempo. |
Recupera dados de todas as colunas, mas somente uma linha por vez.Você deve navegar linhas usando métodos, sistema autônomo MoveNext. |
A seqüência de caracteres de formatação |
O SQL servidor formata a cadeia XML e o envia para o consumidor. |
Recupera dados do conjunto de linhas em seu formato nativo (solicitações que o provedor de enviá-lo sistema autônomo cadeias de caracteres Unicode) e, em seguida, cria a seqüência de caracteres que contém sistema autônomo dados no formato XML. |
Controlar formatação |
Você tem algum nível de controle sobre como a seqüência de caracteres XML é formatada, definindo algumas propriedades específica em SQL servidor 2000. |
Você não tem controle sobre o formato da seqüência de caracteres XML gerado. |
Ao mesmo tempo em que CStreamRowset Fornece uma maneira geral eficiente de mais de recuperação de dados no formato XML, que só é suportada pelo SQL servidor 2000.
Recuperando dados XML usando CStreamRowset
Especificar CStreamRowset sistema autônomo o tipo de conjunto de linhas no seu CCommand ou CTable declaração. Você pode usá-lo com seu próprio acessador ou nenhum acessador, por exemplo:
CCommand< CAccessor<CMyAccessor>, CStreamRowset > myCmd;
- ou -
CCommand< CNoAccessor, CStreamRowset > myCmd;
Normalmente quando você telefonar CCommand::Open (especificando, por exemplo, CRowset sistema autônomo o TRowset classe), ele obtém um IRowset ponteiro.ICommand::Execute Retorna um IRowset ponteiro, que é armazenado no m_spRowset membro do CRowset objeto. Métodos, sistema autônomo MoveFirst, MoveNext, e GetData Use esse ponteiro para recuperar sistema autônomo dados.
Por outro lado, quando você chama CCommand::Open (mas especificar CStreamRowset sistema autônomo o TRowset classe), ICommand::Execute Retorna um ISequentialStream ponteiro, que é armazenado no m_spStream membro de dados de CStreamRowset.Em seguida, você usar o Leituramétodo para recuperar os dados (seqüência de caracteres Unicode) no formato XML.Por exemplo:
myCmd.m_spStream->Read()
SQL servidor 2000 executa a formatação de XML e retorna todas sistema autônomo colunas e todas sistema autônomo linhas do conjunto de linhas sistema autônomo uma string XML.
Para obter um exemplo de uso a Leitura método, consulte "Adicionando suporte de XML para o consumidor" Implementação de um consumidor Simple.
Observação: |
---|
Suporte a XML usando CStreamRowset funciona somente com o SQL servidor 2000 e é necessário que o provedor OLE DB para SQL servidor 2000 (instalado com o MDAC). |
Recuperando dados XML usando CXMLAccessor
CXMLAccessor permite acessar dados de uma fonte de dados sistema autônomo dados de seqüência de caracteres quando você não possui conhecimento do esquema do armazenamento de dados.CXMLAccessor funciona sistema autônomo CDynamicStringAccessorW com exceção do que o primeiro converte todos sistema autônomo dados acessados do armazenamento de dados sistema autônomo dados (marcados) formatada em XML. sistema autônomo nomes de marca XML correspondam nomes de coluna do armazenamento de dados de sistema autônomo ao máximo.
Use CXMLAccessor sistema autônomo você faria qualquer Outros classe de acessador, passando sistema autônomo um parâmetro de modelo para CCommand ou CTable:
CTable<CXMLAccessor, CRowset> rs;
Use GetXMLRowData para recuperar dados da tabela uma linha por vez e navegar linhas usando métodos, sistema autônomo 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 sistema autônomo informações de coluna (tipo de dados) sistema autônomo dados de cadeia de caracteres formatada em XML.