Abrufen von Daten mittels AdomdDataReader

Beim Abrufen analytischer Daten bietet das - AdomdDataReader Objekt ein gutes Gleichgewicht zwischen Mehraufwand und Interaktivität. Das AdomdDataReader -Objekt ruft einen schreibgeschützten, vorwärts-schreibgeschützten, flachen Datenstrom aus einer analytischen Datenquelle ab. Dieser nicht zwischengespeicherte Datenstrom ermöglicht es der prozeduralen Logik, die Ergebnisse von einer analytischen Datenquelle effektiv sequenziell zu verarbeiten. Dies ist eine AdomdDataReader gute Wahl beim Abrufen großer Datenmengen zu Anzeigezwecken, da die Daten nicht im Arbeitsspeicher zwischengespeichert werden.

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

Der Kompromiss für eine optimierte Leistung ist, dass das AdomdDataReader -Objekt weniger Informationen über abgerufene Daten als andere Datenabrufmethoden bietet. Das AdomdDataReader -Objekt unterstützt kein großes Objektmodell für die Darstellung von Daten oder Metadaten, und dieses Objektmodell ermöglicht auch keine komplexeren analytischen Features wie das Rückschreiben von Zellen. Das -Objekt stellt AdomdDataReader jedoch einen Satz stark typischer Methoden zum Abrufen von Cellsetdaten und eine Methode zum Abrufen von Cellsetmetadaten in einem Tabellenformat bereit. Darüber hinaus AdomdDataReader implementiert die IDbDataReader-Schnittstelle zur Unterstützung der Datenbindung und zum Abrufen von Daten mithilfe der SelectCommand-Methode aus dem System.Data-Namespace der Microsoft .NET Framework-Klassenbibliothek.

Abrufen von Daten aus AdomdDataReader

Führen Sie die folgenden Schritte AdomdDataReader aus, um das -Objekt zum Abrufen von Daten zu verwenden:

  1. Erstellen Sie eine neue Instanz des Objekts.

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

  2. Abrufen von Daten.

    Während der Befehl die Abfrage ausgibt, gibt ADOMD.NET die Ergebnisse im Resultsetformat zurück, einem Tabellenformat, wie in der XML for Analysis-Spezifikation beschrieben, AdomdDataReader um die Daten für das Objekt zu flachen. In Anbetracht der variablen Dimensionalität derartiger Daten ist das Tabellenformat bei der Abfrage analytischer Daten ungewöhnlich.

    ADOMD.NET speichert diese Tabellenergebnisse im Netzwerkpuffer auf dem Client, bis Sie diese über eine der folgenden Methoden anfordern:

    • Rufen Sie die Read-Methode des AdomdDataReader-Objekts auf.

      Die Read -Methode erhält eine Zeile aus den Abfrageergebnissen. Sie können dann den Namen oder den Ordinalverweis der Spalte an die Item-Eigenschaft übergeben, um auf jede Spalte der zurückgegebenen Zeile zu zugreifen. Der Name der ersten Spalte in der aktuellen Zeile ist beispielsweise ColumnName. Dann geben entweder reader[0].ToString() oder reader["ColumnName"].ToString() die Inhalte der ersten Spalte in der aktuellen Zeile zurück.

    • Rufen Sie eine der typisierten Accessormethoden auf.

      die AdomdDataReader eine Reihe von typierten Accessormethoden bietet– Methoden, mit denen Sie auf Spaltenwerte in ihren nativen Datentypen zugreifen können. Wenn Sie den zugrunde liegenden Datentyp eines Spaltenwerts kennen, verringert eine typisierte Accessormethode den erforderlichen Aufwand für die Typkonvertierung beim Abruf des Spaltenwerts und bietet damit die höchste Leistung.

      Zu den verfügbaren typierten Accessormethoden GetDateTimegehören , GetDoubleund GetInt32. Eine vollständige Liste der typierten Accessormethoden finden Sie unter AdomdDataReader.

  3. Schließen Sie den Leser.

    Sie sollten immer die -Methode Close aufrufen, wenn Sie die Verwendung des -Objekts abgeschlossen AdomdDataReader haben. Während eine Instanz eines -Objekts AdomdDataReader geöffnet ist, AdomdConnection wird ausschließlich von verwendet AdomdDataReader. Sie können keine Befehle auf der Instanz AdomdConnectionvon ausführen, einschließlich der Erstellung eines anderen AdomdDataReader oder System.Xml. XmlReader, bis Sie den ursprünglichen schließen AdomdDataReader.

Beispiel für das Abrufen von Daten aus AdomdDataReader

Im folgenden Codebeispiel wird ein -Objekt AdomdDataReader durch iteriert, und die ersten beiden Werte werden als Zeichenfolgen aus jeder Zeile zurückgegeben.

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 aus AdomdDataReader

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

Beispiel für das Abrufen von Metadaten aus AdomdDataReader

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

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 Resultsets

Data Mining unterstützt das Konzept der geschachtelten Tabellen, welche ADOMD.NET als geschachtelte Rowsets verfügbar macht. Um das geschachtelte Rowset abzurufen, das jeder Zeile zugeordnet ist, rufen Sie die -Methode GetDataReader auf.