Freigeben über


Abrufen von Daten mithilfe des AdomdDataReader

Beim Abrufen von Analysedaten bietet das AdomdDataReader Objekt ein gutes Gleichgewicht zwischen Overhead und Interaktivität. Das AdomdDataReader Objekt ruft einen schreibgeschützten, vorwärtsgerichteten, flachen Datenstrom von einer analytischen Datenquelle ab. Dieser ungepufferte Datenstrom ermöglicht die verfahrenstechnische Logik, ergebnisse aus einer analytischen Datenquelle sequenziell effizient zu verarbeiten. Dies macht die AdomdDataReader gute Wahl beim Abrufen großer Datenmengen für Anzeigezwecke, da die Daten nicht im Arbeitsspeicher zwischengespeichert werden.

Das AdomdDataReader kann auch die Anwendungsleistung erhöhen, indem Daten abgerufen werden, sobald sie verfügbar sind, anstatt auf die vollständigen Ergebnisse der Abfrage zu warten. Der AdomdDataReader reduziert auch den Systemaufwand, da dieser Datenleser standardmäßig nur eine Zeile gleichzeitig im Arbeitsspeicher speichert.

Der Kompromiss für eine optimierte Leistung besteht darin, dass das AdomdDataReader Objekt weniger Informationen zu abgerufenen Daten bereitstellt als andere Datenabrufmethoden. Das AdomdDataReader Objekt unterstützt kein großes Objektmodell für die Darstellung von Daten oder Metadaten, noch ermöglicht dieses Objektmodell komplexere analytische Features wie Zellrückschreiben. Das AdomdDataReader Objekt stellt jedoch eine Reihe stark typierter Methoden zum Abrufen von Zellsatzdaten und eine Methode zum Abrufen von Zellsatzmetadaten in einem tabellarischen Format bereit. Darüber hinaus implementiert AdomdDataReader die Schnittstelle IDbDataReader, um die Datenbindung zu unterstützen und Daten mithilfe der Methode SelectCommand aus dem Namespace System.Data der Klassenbibliothek des Microsoft .NET Frameworks abzurufen.

Abrufen von Daten aus dem AdomdDataReader

Um das Objekt zum Abrufen von Daten zu verwenden, führen Sie die AdomdDataReader folgenden Schritte aus:

  1. Erstellen Sie eine neue Instanz des Objekts.

    Um eine neue Instanz der AdomdDataReader Klasse zu erstellen, rufen Sie die Execute Oder-Methode ExecuteReader des AdomdCommand Objekts auf.

  2. Daten abrufen.

    Wenn der Befehl die Abfrage ausführt, gibt ADOMD.NET die Ergebnisse im Resultset-Format zurück, ein tabellarisches Format, wie in der XML für Analysespezifikation beschrieben, um die Daten für das AdomdDataReader Objekt zu vereinfachen. Ein tabellarisches Format ist ungewöhnlich beim Abfragen von Analysedaten unter Berücksichtigung der variablen Dimensionalität in solchen Daten.

    ADOMD.NET speichert diese tabellarischen Ergebnisse im Netzwerkpuffer auf dem Client, bis Sie sie mithilfe einer der folgenden Methoden anfordern:

    • Rufen Sie die Read Methode des AdomdDataReader Objekts auf.

      Die Read Methode ruft eine Zeile aus den Abfrageergebnissen ab. Anschließend können Sie den Namen oder den Ordinalverweis der Spalte an die Item-Eigenschaft übergeben, um auf jede Spalte der zurückgegebenen Zeile zuzugreifen. Die erste Spalte in der aktuellen Zeile heißt z. B. "ColumnName". Entweder reader[0].ToString() oder reader["ColumnName"].ToString() gibt den Inhalt der ersten Spalte in der aktuellen Zeile zurück.

    • Rufen Sie eine der typisierten Accessor-Methoden auf.

      Das AdomdDataReader bietet eine Reihe von typisierten Zugriffs-Methoden, mit denen Sie auf Spaltenwerte in ihren systemeigenen Datentypen zugreifen können. Wenn Sie den zugrunde liegenden Datentyp eines Spaltenwerts kennen, reduziert eine typierte Accessormethode die Menge der Typkonvertierung, die beim Abrufen des Spaltenwerts erforderlich ist, und bietet damit die höchste Leistung.

      Einige der verfügbaren typisierten Accessor-Methoden umfassen GetDateTime, GetDouble und GetInt32. Eine vollständige Liste der typierten Accessormethoden finden Sie unter AdomdDataReader.

  3. Schließen Sie den Leser.

    Sie sollten die Close Methode immer aufrufen, wenn Sie die Verwendung des AdomdDataReader Objekts abgeschlossen haben. Während eine Instanz eines AdomdDataReader 'Objekts geöffnet ist, wird dies AdomdConnection ausschließlich von diesem AdomdDataReaderverwendet. Sie können keine Befehle auf der Instanz von AdomdConnection ausführen, einschließlich der Erstellung eines anderen AdomdDataReader oder eines System.Xml.XmlReader, bis Sie das Original AdomdDataReader geschlossen haben.

Beispiel für das Abrufen von Daten aus dem AdomdDataReader

Das folgende Codebeispiel durchläuft ein AdomdDataReader Objekt und gibt die ersten beiden Werte als Zeichenfolgen aus jeder Zeile zurück.

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();  

Abrufen von Metadaten vom AdomdDataReader

Während eine Instanz eines AdomdDataReader Objekts geöffnet ist, können Sie Schemainformationen oder Metadaten über das aktuelle Recordset mithilfe der GetSchemaTable Methode abrufen. GetSchemaTable gibt ein DataTable - Objekt zurück, das mit den Schemainformationen für das aktuelle Recordset aufgefüllt wird. Die DataTable enthält eine Zeile für jede Spalte des Recordsets. Jede Spalte der Schematabellenzeile entspricht einer Eigenschaft der Spalte, die im Cellset zurückgegeben wird, wobei ColumnName der Name der Eigenschaft und der Wert der Spalte der Wert der Eigenschaft ist.

Beispiel für das Abrufen von Metadaten aus dem AdomdDataReader

Im folgenden Codebeispiel werden die Schemainformationen für ein AdomdDataReader Objekt geschrieben.

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();  
}  

Abrufen mehrerer Ergebnismengen

Data Mining unterstützt das Konzept geschachtelter Tabellen, die ADOMD.NET als geschachtelte Zeilenmengen bereitstellt. Um das geschachtelte Rowset abzurufen, das jeder Zeile zugeordnet ist, rufen Sie die GetDataReader Methode auf.