Recupero di dati tramite AdomdDataReader

Quando si recuperano dati analitici, l'oggetto AdomdDataReader fornisce un buon equilibrio tra overhead e interattività. L'oggetto AdomdDataReader recupera un flusso di dati flat di sola lettura, forward-only e flat da un'origine dati analitica. Tale flusso privo di buffer consente alla logica procedurale di elaborare sequenzialmente risultati da un'origine dati analitici con notevole efficienza. Ciò rende la AdomdDataReader scelta ottimale quando si recuperano grandi quantità di dati a scopo di visualizzazione perché i dati non vengono memorizzati nella cache in memoria.

Può AdomdDataReader anche aumentare le prestazioni dell'applicazione recuperando i dati non appena sono disponibili, invece di attendere che siano restituiti i risultati completi della query. Riduce AdomdDataReader anche l'overhead di sistema perché, per impostazione predefinita, questo lettore archivia in memoria solo una riga alla volta.

Il compromesso per le prestazioni ottimizzate è che l'oggetto AdomdDataReader fornisce meno informazioni sui dati recuperati rispetto ad altri metodi di recupero dati. L'oggetto AdomdDataReader non supporta un modello a oggetti di grandi dimensioni per la rappresentazione di dati o metadati, né questo modello a oggetti consente funzionalità analitiche più complesse, ad esempio il writeback delle celle. Tuttavia, l'oggetto AdomdDataReader fornisce un set di metodi fortemente tipizzato per recuperare i dati del set di celle e un metodo per recuperare i metadati del set di celle in formato tabulare. Implementa inoltre AdomdDataReaderl'interfaccia IDbDataReader per supportare data binding e recuperare i dati usando il metodo SelectCommand dallo spazio dei nomi System.Data della libreria di classi microsoft .NET Framework.

Recupero di dati tramite AdomdDataReader

Per usare l'oggetto AdomdDataReader per recuperare i dati, seguire questa procedura:

  1. Creare una nuova istanza dell'oggetto.

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

  2. Recuperare i dati.

    Quando il comando esegue la query, ADOMD.NET restituisce i risultati in formato set di risultati, un formato tabulare come descritto nella specifica XML for Analysis, per appiattire i dati per l'oggettoAdomdDataReader. 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:

    • Chiamare il metodo Read dell'oggetto AdomdDataReader.

      Il Read metodo ottiene una riga dai risultati della query. È quindi 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.

      Fornisce AdomdDataReader una serie di metodi delle funzioni di accesso tipi, ovvero metodi che consentono di accedere ai valori di colonna nei relativi 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 dei metodi delle funzioni di accesso tipi che sono disponibili includono GetDateTime, GetDoublee GetInt32. Per un elenco completo dei metodi delle funzioni di accesso tipi, vedere AdomdDataReader.

  3. Chiudere il lettore.

    È consigliabile chiamare sempre il Close metodo al termine dell'uso dell'oggetto AdomdDataReader . Mentre un'istanza di un AdomdDataReader oggetto è aperta, AdomdConnection l'oggetto viene usato esclusivamente da tale AdomdDataReaderoggetto . Non sarà possibile eseguire comandi nell'istanza AdomdConnectiondi , AdomdDataReader inclusa la creazione di un altroSystem.Xml . XmlReader, fino a quando non si chiude l'oggetto originale AdomdDataReader.

Esempio di recupero di dati tramite AdomdDataReader

Nell'esempio di codice seguente viene illustrato AdomdDataReader come scorrere un oggetto e vengono restituiti i primi due valori, sotto forma di stringhe, da ogni riga.

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 AdomdDataReader oggetto è aperta, è possibile recuperare informazioni sullo schema, o metadati, sul recordset corrente usando il GetSchemaTable 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 è mappata 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

L'esempio di codice seguente scrive le informazioni sullo schema per un AdomdDataReader oggetto .

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 annidato associato a ogni riga, chiamare il GetDataReader metodo .