Recuperando dados usando o AdomdDataReader
Ao recuperar dados analíticos, o AdomdDataReader objeto fornece um bom equilíbrio entre sobrecarga e interatividade. O AdomdDataReader objeto recupera um fluxo de dados nivelado somente leitura, somente avanço e de uma fonte de dados analíticos. Esse fluxo de dados não armazenado permite que a lógica procedural processe com eficiência os resultados de uma fonte de dados analíticos de forma sequencial. Isso torna a AdomdDataReader boa opção ao recuperar grandes quantidades de dados para fins de exibição porque os dados não são armazenados em cache na memória.
O AdomdDataReader também pode aumentar o desempenho do aplicativo recuperando dados assim que eles estão disponíveis, em vez de aguardar os resultados completos da consulta serem retornados. O AdomdDataReader também reduz a sobrecarga do sistema porque, por padrão, esse leitor armazena apenas uma linha por vez na memória.
A compensação pelo desempenho otimizado é que AdomdDataReader o objeto fornece menos informações sobre os dados recuperados do que outros métodos de recuperação de dados. O AdomdDataReader objeto não dá suporte a um modelo de objeto grande para representar dados ou metadados, nem esse modelo de objeto permite recursos analíticos mais complexos, como write-back de célula. No entanto, AdomdDataReader o objeto fornece um conjunto de métodos fortemente digitados para recuperar dados de conjunto de células e um método para recuperar metadados de conjunto de células em um formato tabular. Além disso, AdomdDataReader implementa a interface IDbDataReader para dar suporte à associação de dados e para recuperar dados usando o método SelectCommand, no namespace System.Data da Biblioteca de Classes do Microsoft .NET Framework.
Recuperando dados do AdomdDataReader
Para usar o objeto AdomdDataReader para recuperar dados, siga estas etapas:
Crie uma nova instância do objeto.
Para criar uma nova instância da classe AdomdDataReader , chame o método Execute ou ExecuteReader do AdomdCommand objeto .
Recuperar dados.
Conforme o comando executa a consulta, ADOMD.NET retorna os resultados no formato Resultset , um formato tabular, conforme descrito na especificação XML for Analysis, AdomdDataReader para nivelar os dados do objeto. Um formato tabelar é incomum na consulta de dados analíticos que consideram a dimensionalidade variável em tais dados.
O ADOMD.NET armazena esses resultados tabulares no buffer de rede no cliente até que você solicite-os usando um dos métodos a seguir:
Chame o método Read do objeto AdomdDataReader.
O Read método obtém uma linha dos resultados da consulta. Em seguida, você pode passar o nome ou a referência ordinal da coluna para a propriedade Item para acessar cada coluna da linha retornada. Por exemplo, a primeira coluna da linha atual é nomeada, ColumnName. Em seguida,
reader[0].ToString()
oureader["ColumnName"].ToString()
retornarão o conteúdo da primeira coluna da linha atual.Chame um dos métodos de acessador de tipo.
O AdomdDataReader fornece uma série de métodos de acessador digitados – métodos que permitem acessar valores de coluna em seus tipos de dados nativos. Quando você conhece o tipo de dados subjacente de um valor de coluna, um método de acessador de tipo reduz a quantidade de conversão de tipo exigida na recuperação do valor da coluna e oferece o melhor desempenho.
Alguns dos métodos de acessador digitados disponíveis incluem GetDateTime, GetDoublee GetInt32. Para ver uma lista completa dos métodos de acessador digitados, consulte AdomdDataReader.
Feche o leitor.
Você sempre deve chamar o Close método quando terminar de usar o AdomdDataReader objeto . Enquanto uma instância de um AdomdDataReader objeto 'está aberta, o AdomdConnection está sendo usado exclusivamente por esse AdomdDataReader. Você não poderá executar nenhum comando na instância AdomdConnectiondo , incluindo a criação de outro AdomdDataReader ou System.Xml. XmlReader, até que você feche o original AdomdDataReader.
Exemplo de recuperação de dados do AdomdDataReader
O exemplo de código a AdomdDataReader seguir itera por meio de um objeto e retorna os dois primeiros valores, como cadeias de caracteres, de cada linha.
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();
Recuperando metadados do AdomdDataReader
Enquanto uma instância de um AdomdDataReader objeto está aberta, você pode recuperar informações de esquema, ou metadados, sobre o modelo de registros atual usando o GetSchemaTable método . GetSchemaTable retorna um objeto DataTable que é preenchido com as informações de esquema para o registro atual. O DataTable conterá uma linha para cada coluna do conjunto de registros. Cada coluna da linha da tabela do esquema é mapeada para uma propriedade da coluna retornada no conjunto de células, em que ColumnName é o nome da propriedade e o valor da coluna é o valor da propriedade.
Exemplo de recuperação de metadados do AdomdDataReader
O exemplo de código a seguir grava as informações de esquema para um AdomdDataReader objeto .
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();
}
Recuperando vários conjuntos de resultados
A mineração de dados dá suporte ao conceito de tabelas aninhadas, exibidas pelo ADOMD.NET como conjuntos de linhas aninhados. Para recuperar o conjuntos de linhas aninhados associados a cada linha, chame o GetDataReader método .