Recupero di dati tramite AdomdDataReader

Nel recupero di dati analitici, l'oggetto AdomdDataReader consente di ottenere un buon bilanciamento tra overhead e interattività. L'oggetto AdomdDataReader consente di recuperare un flusso di dati bidimensionale, forward-only e di sola lettura da un'origine dati analitici. Tale flusso privo di buffer consente alla logica procedurale di elaborare sequenzialmente risultati da un'origine dati analitici con notevole efficienza. Per questo motivo l'oggetto AdomdDataReader rappresenta una soluzione efficace durante il recupero di grandi quantità di dati da visualizzare poiché i dati stessi non vengono memorizzati nella memoria cache.

L'oggetto AdomdDataReader consente inoltre di aumentare le prestazioni dell'applicazione recuperando i dati non appena sono disponibili anziché attendere i risultati completi della query da restituire. Tramite AdomdDataReader è inoltre possibile ridurre l'overhead di sistema poiché, per impostazione predefinita, tale lettore archivia in memoria solo una riga alla volta.

Le prestazioni risultano ottimizzate poiché l'oggetto AdomdDataReader fornisce meno informazioni sui dati recuperati rispetto agli altri metodi per il recupero di dati. L'oggetto AdomdDataReader non supporta un modello di oggetti di grandi dimensioni per la rappresentazione di dati o metadati né consente a tale modello di utilizzare funzionalità analitiche più complesse, ad esempio il writeback delle celle. L'oggetto AdomdDataReader fornisce tuttavia un set di metodi fortemente tipizzati per il recupero di dati di set di celle e un metodo per il recupero di metadati di set di celle in formato tabulare. AdomdDataReader implementa inoltre l'interfaccia IDbDataReader per il supporto dell'associazione dati e per il recupero di dati utilizzando il metodo SelectCommand dallo spazio dei nomi System.Data della libreria di classi Microsoft .NET Framework.

Recupero di dati tramite AdomdDataReader

Per utilizzare l'oggetto AdomdDataReader per recuperare dati, effettuare le seguenti operazioni:

  1. Creare una nuova istanza dell'oggetto.

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

  2. Recuperare i dati

    Quando il comando esegue la query, ADOMD.NET restituisce i risultati nel formato tabulare Resultset descritto nella specifica XML for Analysis in modo da rendere bidimensionali i dati per l'oggetto AdomdDataReader. Considerando le dimensioni variabili dei dati analitici, l'utilizzo di un formato tabulare è anomalo in caso di esecuzione di query su questo tipo di dati.

    ADOMD.NET archivia tali risultati tabulari nel buffer di rete presente nel client fino a quando non vengono richiesti dall'utente tramite la chiamata a uno dei metodi seguenti:

    • Metodo Read dell'oggetto AdomdDataReader.

      Il metodo Read ottiene una riga dai risultati della query. Successivamente è possibile passare il nome o il riferimento ordinale della colonna alla proprietà Item per accedere a ogni colonna della riga restituita. Se ad esempio alla prima colonna della riga corrente è assegnato il nome ColumnName, reader[0].ToString() o reader["ColumnName"].ToString() restituiranno il contenuto della prima colonna della riga corrente.

    • Uno dei metodi tipizzati della funzione di accesso.

      L'oggetto AdomdDataReader fornisce una serie di metodi tipizzati della funzione di accesso che consentono di accedere ai valori di colonna nei tipi di dati nativi. Quando si conosce il tipo di dati sottostanti di un valore di colonna, un metodo tipizzato della funzione di accesso riduce la conversione dei tipi necessaria per il recupero del valore di colonna ottimizzando in questo modo le prestazioni.

      Alcuni tra i metodi tipizzati della funzione di accesso disponibili includono GetDateTime, GetDouble e GetInt32. Per un elenco completo di metodi tipizzati della funzione di accesso, vedere AdomdDataReader.

  3. Chiudere il lettore.

    È sempre necessario chiamare il metodo Close al termine dell'utilizzo dell'oggetto AdomdDataReader. Mentre un'istanza di un oggetto AdomdDataReader è aperta, AdomdConnection viene utilizzato esclusivamente dall'oggetto AdomdDataReader specifico. Non sarà possibile eseguire qualsiasi comando sull'istanza di AdomdConnection, ad esempio la creazione di un altro oggetto AdomdDataReader o System.Xml.XmlReader, fino a quando l'oggetto AdomdDataReader non verrà chiuso.

Esempio di recupero di dati tramite AdomdDataReader

Nell'esempio di codice seguente viene scorso l'oggetto AdomdDataReader e vengono restituiti i primi due valori di ogni riga in formato stringa.

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

Recupero di metadati tramite AdomdDataReader

Mentre un'istanza di un oggetto AdomdDataReader è aperta, è possibile recuperare informazioni sullo schema, ovvero metadati, per il recordset corrente utilizzando il metodo GetSchemaTable. Il metodo GetSchemaTable restituisce un oggetto DataTable popolato con le informazioni sullo schema per il recordset corrente. Gli oggetti DataTable conterranno una riga per ogni colonna del recordset. Ogni colonna di una riga di tabella dello schema corrisponde a una proprietà della colonna restituita nel set di celle, in cui ColumnName è il nome della proprietà e il valore della colonna è il valore della proprietà.

Esempio di recupero di metadati tramite AdomdDataReader

Nell'esempio di codice seguente vengono restituite le informazioni sullo schema per un oggetto 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();
}

Recupero di più set di risultati

Nelle operazioni di data mining è supportato il concetto di tabelle nidificate, che ADOMD.NET espone come set di righe nidificati. Per recuperare il set di righe nidificato associato a ogni riga, chiamare il metodo GetDataReader.