Recupero di dati tramite XmlReader

La classe XmlReader, appartenente allo spazio dei nomi System.Xml per la libreria di classi Microsoft .NET Framework, è analoga alla classe AdomdDataReader poiché anche la classe XmlReader consente di accedere rapidamente ai dati, in modalità non in cache e forward-only. Se non è necessaria una vista analitica dei dati in memoria tramite l'oggetto CellSet, l'oggetto XmlReader rappresenta la soluzione ideale per il recupero di dati XML, soprattutto nel caso in cui siano presenti grandi quantità di dati. Poiché XmlReader trasmette flussi di dati, XmlReader non deve recuperare e memorizzare nella cache tutti i dati prima di esporli al chiamante, situazione che si verificherebbe invece nel caso in cui un oggetto CellSet venisse utilizzato per convertire la risposta XMLA in una rappresentazione analitica del modello di oggetti.

La classe XmlReader consente di accedere direttamente alla risposta XMLA ricevuta da ADOMD.NET quando viene chiamato il metodo ExecuteXmlReader dell'oggetto AdomdCommand. Poiché i dati recuperati sono rappresentati da codice XML non elaborato, è necessario analizzare manualmente i dati e i metadati. Non appena i dati sono stati recuperati, l'oggetto XmlReader deve essere chiuso.

Recupero di dati e metadati

Per utilizzare la classe XmlReader per recuperare i dati, effettuare le seguenti operazioni:

  1. Creare una nuova istanza dell'oggetto.

    Per creare una nuova istanza della classe XmlReader, chiamare il metodo Execute o ExecuteXmlReader dell'oggetto AdomdCommand.

  2. Recuperare i dati

    Dopo che il comando ha eseguito la query e ha restituito una classe XmlReader, è necessario analizzare i dati e i metadati. I dati e i metadati XML vengono presentati nel formato nativo utilizzato dal provider di XML for Analysis. Per la maggior parte dei provider di XML for Analysis, il formato nativo è costituito dal formato MDDataSet. Il formato MDDataSet fornisce sia i dati che i metadati per i set di celle in una struttura corretta. Per ulteriori informazioni sul formato MDDataSet, vedere la specifica XML for Analysis.

  3. Chiudere il lettore.

    È sempre necessario chiamare il metodo Close al termine dell'utilizzo dell'oggetto XmlReader. Mentre un oggetto XmlReader è aperto, detiene l'utilizzo esclusivo dell'oggetto AdomdConnection utilizzato per eseguire il comando. Non sarà pertanto possibile eseguire alcun comando che utilizza tale oggetto AdomdConnection, ad esempio la creazione di un altro oggetto XmlReader o AdomdDataReader, fino a quando non si chiude l'oggetto XmlReader originale.

Esempio di recupero di dati tramite XmlReader

Nell'esempio seguente viene creato un comando e vengono recuperati i dati come classe XmlReader e il contenuto del file viene restituito alla console.

        void OutputDataWithXML()
        {
            //Open a connection to the local server.
            AdomdConnection conn = new AdomdConnection("Data Source=localhost");
            conn.Open();

            //Create a command to retrieve the data.
            AdomdCommand cmd = new AdomdCommand(@"WITH MEMBER [Measures].[FreightCostPerOrder] AS 
[Measures].[Reseller Freight Cost]/[Measures].[Reseller Order Quantity],  
FORMAT_STRING = 'Currency'

SELECT [Geography].[Geography].[Country].&[United States].Children ON ROWS, 
[Date].[Calendar].[Calendar Year] ON COLUMNS
FROM [Adventure Works]
WHERE [Measures].[FreightCostPerOrder]", conn);

            //Execute the command, retrieving an XmlReader.
            System.Xml.XmlReader reader = cmd.ExecuteXmlReader();

            //Do something with the reader: Parse data, Parse metadata,
            //                              Save for later loading into CellSet, etc.
            Console.WriteLine(reader.ReadOuterXml());

            //Close the reader, then the connection
            reader.Close();
            conn.Close();

            //Await user input.
            Console.ReadLine();
        }