Condividi tramite


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, MoveNexte 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.

Vedi anche

Uso delle funzioni di accesso