Récupération de données à l'aide d'AdomdDataReader

Lorsqu'il s'agit de récupérer des données analytiques, l'objet AdomdDataReader offre un bon compromis entre charge et interactivité. L'objet AdomdDataReader récupère un flux de données aplati, avant uniquement et en lecture seule auprès d'une source de données analytiques. Ce flux de données, qui n'est pas mis en mémoire tampon, permet à la logique procédurale de traiter de façon séquentielle et efficace les résultats d'une source de données analytiques. Le choix de l'objet AdomdDataReader s'avère judicieux lorsqu'il s'agit de récupérer de grandes quantités de données en vue de les afficher, car les données ne sont pas placées en mémoire cache.

L'objet AdomdDataReader peut également contribuer à améliorer les performances de l'application en récupérant les données dès qu'elles sont disponibles, au lieu d'attendre le retour des résultats complets de la requête. De plus, l'objet AdomdDataReader diminue la charge système dans la mesure où, par défaut, ce lecteur ne stocke qu'une ligne à la fois en mémoire.

L'optimisation des performances conférée par l'objet AdomdDataReader a néanmoins un inconvénient : la quantité d'informations sur les données récupérées est moins importante qu'avec les autres méthodes de récupération de données. L'objet AdomdDataReader ne prend pas en charge un modèle objet volumineux pour représenter les données ou les métadonnées, pas plus qu'il ne tient compte des fonctionnalités analytiques plus complexes comme l'écriture différée de cellule. Toutefois, l'objet AdomdDataReader propose un ensemble de méthodes fortement typées pour la récupération de données d'ensemble de cellules, ainsi qu'une méthode permettant la récupération de métadonnées d'ensemble de cellules sous forme de tableau. En outre, l'objet AdomdDataReader implémente l'interface IDbDataReader pour prendre en charge la liaison de données et la récupération de données à l'aide de la méthode SelectCommand, à partir de l'espace de noms System.Data de la bibliothèque de classes Microsoft .NET Framework.

Récupération de données à partir d'AdomdDataReader

Pour utiliser l'objet AdomdDataReader afin de récupérer des données, procédez comme suit :

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

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

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

    À mesure que la commande exécute la requête, ADOMD.NET retourne les résultats sous forme de Resultset (format tabulaire tel que décrit dans la spécification XML for Analysis) de façon à aplatir les données pour l'objet AdomdDataReader. Le format tabulaire est inhabituel en matière d'interrogation de données analytiques compte tenu de leur dimensionnalité variable.

    ADOMD.NET stocke ces résultats tabulaires dans le tampon réseau du client jusqu'à ce que vous les demandiez en utilisant l'une des méthodes suivantes :

    • Appel de la méthode Read de l'objet AdomdDataReader.

      La méthode Read obtient une ligne à partir des résultats de la requête. Vous pouvez alors transmettre le nom (ou la référence ordinale) de la colonne à la propriété Item pour accéder à chaque colonne de la ligne retournée. Par exemple, la première colonne de la ligne actuelle est nommée ColumnName. Ensuite, reader[0].ToString() ou reader["ColumnName"].ToString() retourne le contenu de la première colonne dans la ligne actuelle.

    • Appel de l'une des méthodes d'accesseur typées.

      L'objet AdomdDataReader fournit une série de méthodes d'accesseur typées—méthodes qui permettent d'accéder aux valeurs de colonne dans leurs types de données natifs. Dans la mesure où vous connaissez le type de données sous-jacent d'une valeur de colonne, une méthode d'accesseur typée diminue le nombre de conversions de type nécessaires au moment de récupérer la valeur de colonne et, de ce fait, procure de meilleures performances.

      GetDateTime, GetDouble et GetInt32 comptent parmi les méthodes d'accesseur typées disponibles. Pour obtenir la liste complète des méthodes d'accesseur typées, consultez AdomdDataReader.

  3. Fermez le lecteur.

    Vous devez toujours appeler la méthode Close lorsque vous avez fini d'utiliser l'objet AdomdDataReader. Lorsqu'une instance d'un objet AdomdDataReader est ouverte, l'objet AdomdConnection est utilisé exclusivement par cet objet AdomdDataReader. Vous ne pourrez pas exécuter de commandes sur l'instance de l'objet AdomdConnection, notamment créer un autre objet AdomdDataReader ou System.Xml.XmlReader, tant que vous n'aurez pas fermé le AdomdDataReader initial.

Exemple de récupération de données à partir d'AdomdDataReader

L'exemple de code suivant parcourt un objet AdomdDataReader et retourne les deux premières valeurs de chaque ligne sous forme de chaînes.

If Reader.HasRows Then
    Do While objReader.Read()
        Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
            objReader.GetString(0), objReader.GetString(1))
    Loop
Else
  Console.WriteLine("No rows returned.")
End If

objReader.Close()
if (objReader.HasRows)
  while (objReader.Read())
    Console.WriteLine("\t{0}\t{1}", _
        objReader.GetString(0), objReader.GetString(1));
else
  Console.WriteLine("No rows returned.");

objReader.Close();

Récupération de métadonnées à partir d'AdomdDataReader

Lorsqu'une instance d'un objet AdomdDataReader est ouverte, vous pouvez récupérer des informations de schéma, ou métadonnées, sur le jeu d'enregistrements actuel à l'aide de la méthode GetSchemaTable. GetSchemaTable retourne un objet DataTable rempli des informations de schéma pour le jeu d'enregistrements actuel. L'objet DataTable contiendra une ligne pour chaque colonne du jeu d'enregistrements. Chaque colonne de la ligne de table de schéma correspond à une propriété de la colonne retournée dans l'ensemble de cellules, où ColumnName représente le nom de la propriété et la valeur de la colonne correspond à la valeur de la propriété.

Exemple de récupération de métadonnées à partir d'AdomdDataReader

L'exemple de code suivant écrit les informations de schéma pour un objet AdomdDataReader.

Dim schemaTable As DataTable = objReader.GetSchemaTable()

Dim objRow As DataRow
Dim objColumn As DataColumn

For Each objRow In schemaTable.Rows
  For Each objColumn In schemaTable.Columns
    Console.WriteLine(objColumn.ColumnName & " = " & objRow(objColumn).ToString())
  Next
  Console.WriteLine()
Next
DataTable schemaTable = objReader.GetSchemaTable();
foreach (DataRow objRow in schemaTable.Rows)
{
  foreach (DataColumn objColumn in schemaTable.Columns)
    Console.WriteLine(objColumn.ColumnName + " = " + objRow[objColumn]);
  Console.WriteLine();
}

Récupération de plusieurs ensembles de résultats

L'exploration de données prend en charge le concept de tables imbriquées, qu'ADOMD.NET présente sous forme d'ensembles de lignes imbriqués. Pour récupérer l'ensemble de lignes imbriqué associé à chaque ligne, vous devez appeler la méthode GetDataReader.