Acessando dados XML
Há dois métodos para recuperar os dados XML de uma fonte de dados separados: um usa CStreamRowset e outras utilizações CXMLAccessor.
Functionality |
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 somente 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 do conjunto de linhas em seu formato nativo (solicitações que o provedor de enviá-lo como seqüências 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 eficiente geral mais de recuperação de dados no formato XML, ele só é suportado pelo 2000 de SQL Server.
Recuperando dados XML usando CStreamRowset
Você pode especificar CStreamRowset como 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ê chamar CCommand::Open (especificando, por exemplo, CRowset como o TRowset classe), ele obtém um IRowsetponteiro. ICommand::ExecuteRetorna um IRowseto ponteiro, que é armazenado na m_spRowset membro da CRowset objeto. Métodos como MoveFirst, MoveNext, e GetData usar esse ponteiro para recuperar 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. Você usar o Read método para recuperar os dados (cadeia de caracteres Unicode) em formato XML. For example:
myCmd.m_spStream->Read()
2000 De SQL Server realiza a formatação de XML e retorna todas as colunas e todas as linhas do conjunto de linhas, como uma seqüência de caracteres XML.
Para um exemplo usando o Read método, consulte "Adicionando suporte de XML para o consumidor" em um consumidor Simple de implementar.
Observação |
---|
Suporte a XML usando CStreamRowset funciona com o SQL Server 2000 de apenas e é necessário que o provedor OLE DB para 2000 de SQL Server (instalado com o MDAC). |
Recuperando dados XML usando CXMLAccessor
CXMLAccessor permite que você acesse 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 acessado de todos os dados do armazenamento de dados como XML formatado (marcado) dados. Os nomes de marca XML correspondam nomes de coluna do armazenamento de dados possível.
Use CXMLAccessor como faria com qualquer outra classe de acessador, passando a ele como um parâmetro de modelo para CCommand ou CTable:
CTable<CXMLAccessor, CRowset> rs;
Use GetXMLRowData para recuperar dados a partir da 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 seqüência de caracteres formatada em XML.