Récupération de données à l'aide de XmlReader

La classe XmlReader, qui fait partie de l'espace de noms System.Xml de la bibliothèque de classes Microsoft .NET Framework, est similaire à la classe AdomdDataReader en ce sens que la classe XmlReader offre également un accès aux données rapide, sans mise en cache et avant uniquement. S'il n'est pas utile d'obtenir une vue analytique en mémoire des données avec l'objet CellSet, l'objet XmlReader est parfait pour récupérer des données XML, surtout lorsqu'il s'agit de grandes quantités de données. Étant donné que XmlReader transmet les données en continu, XmlReader n'a pas besoin de récupérer et mettre en cache l'ensemble des données avant de les exposer à l'appelant, comme ce serait le cas si un objet CellSet était utilisé pour convertir la réponse XMLA en une représentation du modèle objet analytique.

La classe XmlReader fournit un accès direct à la réponse XMLA reçue par ADOMD.NET lorsque la méthode ExecuteXmlReader de l'objet AdomdCommand est appelée. Les données étant récupérées dans un format XML brut, vous devez analyser les données et les métadonnées manuellement. Aussitôt que les données ont été récupérées, l'objet XmlReader doit être fermé.

Récupération de données et de métadonnées

Pour récupérer des données à l'aide de la classe XmlReader, procédez comme suit :

  1. Créez une nouvelle instance de l'objet.

    Pour créer une nouvelle instance de la classe XmlReader, vous devez appeler la méthode Execute ou ExecuteXmlReader de l'objet AdomdCommand.

  2. Récupérez les données.

    Une fois que la commande a exécuté la requête et qu'un XmlReader a été retourné, vous devez analyser les données et les métadonnées. Les données et les métadonnées XML sont présentés dans le format natif utilisé par le fournisseur XMLA. Le format natif de la plupart des fournisseurs XMLA est le format MDDataSet. Le format MDDataSet fournit les données et les métadonnées pour les ensembles de cellules dans un format bien structuré. Pour plus d'informations sur le format MDDataSet, consultez la spécification XML for Analysis.

  3. Fermez le lecteur.

    Vous devez toujours appeler la méthode Close lorsque vous avez fini d'utiliser l'objet XmlReader. Lorsqu'un XmlReader est ouvert, celui-ci XmlReader a une utilisation exclusive de l'objet AdomdConnection qui a été utilisé pour exécuter la commande. Vous ne serez pas en mesure d'exécuter des commandes par le biais de cet objet AdomdConnection, y compris de créer un autre objet XmlReader ou AdomdDataReader, tant que vous n'aurez pas fermé le XmlReader initial.

Exemple de récupération de données à partir de XmlReader

L'exemple suivant exécute une commande et récupère les données sous forme de XmlReader en sortant le contenu du fichier à destination de la 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();
        }