Accesso ai dati XML
Esistono due metodi separati per il recupero di dati XML da un'origine dati: uno usa CStreamRowset e l'altro usa CXMLAccessor.
Funzionalità | CStreamRowset | CXMLAccessor |
---|---|---|
Quantità di dati trasferiti | Recupera i dati da tutte le colonne e le righe contemporaneamente. | Recupera i dati da tutte le colonne, ma solo una riga alla volta. È necessario spostarsi tra le righe usando metodi come MoveNext . |
Formattazione della stringa | SQL Server formatta la stringa XML e la invia al consumer. | Recupera i dati del set di righe nel formato nativo (richiede che il provider lo invii come stringhe Unicode) e quindi compila la stringa che contiene i dati in formato XML. |
Controllare la formattazione | Si ha un certo livello di controllo sulla formattazione della stringa XML impostando alcune proprietà specifiche di SQL Server 2000. | Non si ha alcun controllo sul formato della stringa XML generata. |
Sebbene CStreamRowset
fornisca un modo più efficiente complessivo per recuperare i dati in formato XML, è supportato solo da SQL Server 2000.
Recupero di dati XML tramite CStreamRowset
Specificare CStreamRowset come tipo di set di righe nella CCommand
dichiarazione o CTable
. È possibile usarlo con una funzione di accesso personalizzata o nessuna funzione di accesso, ad esempio:
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
oppure
CCommand<CNoAccessor, CStreamRowset> myCmd;
In genere, quando si chiama CCommand::Open
(specificando, ad esempio, CRowset
come TRowset
classe), ottiene un puntatore IRowset
. ICommand::Execute
restituisce un IRowset
puntatore, archiviato nel m_spRowset
membro dell'oggetto CRowset
. Metodi come MoveFirst
, MoveNext
e GetData
usano tale puntatore per recuperare i dati.
Al contrario, quando si chiama CCommand::Open
(ma si specifica CStreamRowset
come TRowset
classe ), ICommand::Execute
restituisce un ISequentialStream
puntatore archiviato nel m_spStream
membro dati di CStreamRowset. Usare quindi il Read
metodo per recuperare i dati (stringa Unicode) in formato XML. Ad esempio:
myCmd.m_spStream->Read()
SQL Server 2000 esegue la formattazione XML e restituisce tutte le colonne e tutte le righe del set di righe come una stringa XML.
Per un esempio di utilizzo del Read
metodo , vedere Aggiunta del supporto XML al consumer in Implementazione di un consumer semplice.
Nota
Il supporto XML che usa CStreamRowset
funziona solo con SQL Server 2000 e richiede che sia disponibile il provider OLE DB per SQL Server 2000 (installato con MDAC).
Recupero di dati XML tramite CXMLAccessor
CXMLAccessor consente di accedere ai dati da un'origine dati come dati stringa quando non si ha alcuna conoscenza dello schema dell'archivio dati. CXMLAccessor
funziona come CDynamicStringAccessorW
ad eccezione del fatto che il precedente converte tutti i dati a cui si accede dall'archivio dati come dati in formato XML (con tag). I nomi dei tag XML corrispondono ai nomi delle colonne dell'archivio dati il più possibile.
Usare CXMLAccessor
come qualsiasi altra classe della funzione di accesso, passandola come parametro di modello a CCommand
o CTable
:
CTable<CXMLAccessor, CRowset> rs;
Usare GetXMLRowData per recuperare dati dalla tabella una riga alla volta e spostarsi tra righe usando metodi come MoveNext
, ad esempio:
// 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();
}
È possibile usare GetXMLColumnData per recuperare le informazioni sulla colonna (tipo di dati) come dati stringa in formato XML.