Compartilhar via


Recuperando dados usando o AdomdDataReader

Na recuperação de dados analíticos, o objeto AdomdDataReader oferece um bom equilíbrio entre sobrecarga e interatividade. O objeto AdomdDataReader recupera um fluxo dados somente leitura, somente encaminhamento, bidimensional a partir de uma fonte de dados analítica. 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ítica de forma seqüencial. Isso faz do AdomdDataReader uma boa opção para a recuperação de grandes quantidades de dados para fins de exibição, uma vez que os dados não são armazenados em cache em memória.

O AdomdDataReader também pode melhorar o desempenho do aplicativo ao recuperar dados assim que estiverem disponíveis, em vez de aguardar os resultados completos da consulta a ser retornada. O AdomdDataReader também reduz a sobrecarga do sistema porque, por padrão, este leitor só armazena uma linha de cada vez em memória.

A desvantagem do desempenho otimizado é que o objeto AdomdDataReader oferece menos informações sobre os dados recuperados do que outros métodos de recuperação de dados. O objeto AdomdDataReader não dá suporte a um modelo de objeto grande para a representação de dados ou de metadados e esse modelo de objeto também não permite recursos analíticos mais complexos, como o write-back de célula. No entanto, o objeto AdomdDataReader oferece um conjunto de métodos com rigidez de tipo para a recuperação de dados de conjuntos de células e um método para a recuperação de metadados de conjuntos de células em formato tabular. Adicionalmente, AdomdDataReader implementa a interface IDbDataReader para dar suporte à ligação de dados e para a recuperação de dados usando o método SelectCommand a partir do namespace System.Data da Biblioteca de Classes do Microsoft .NET Framework.

Recuperando dados do AdomdDataReader

Para usar objeto AdomdDataReader para recuperar dados, siga estas etapas:

  1. Crie uma nova instância do objeto.

    Para criar uma nova instância da classe AdomdDataReader, chame o método Execute ou ExecuteReader do objeto AdomdCommand.

  2. Recupere dados.

    Quando o comando executa a consulta, o ADOMD.NET retorna os resultados no formato Resultset, um formato tabular como descrito na especificação do XML for Analysis, para que os dados fiquem bidimensionais para o objeto AdomdDataReader. 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 método Read obtém uma linha dos resultados da consulta. Em seguida, você passa 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() ou reader["ColumnName"].ToString() retornarão o conteúdo da primeira coluna da linha atual.

    • Chame um dos métodos de acessador de tipo.

      O AdomdDataReader oferece uma série de métodos de acessador de tipo – métodos que permitem o acesso a 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 de tipo disponíveis incluem GetDateTime, GetDouble e GetInt32. Para obter uma lista completa de métodos de acessador de tipo, consulte AdomdDataReader.

  3. Feche o leitor.

    Sempre chame o método Close quando terminar de usar o objeto AdomdDataReader. Embora uma instância de um objeto AdomdDataReader esteja aberta, o AdomdConnection é usado exclusivamente pelo AdomdDataReader. Você não poderá executar qualquer comando na instância de AdomdConnection, incluindo a criação de outro AdomdDataReader ou de System.Xml.XmlReader, até fechar o AdomdDataReader original.

Exemplo de recuperação de dados do AdomdDataReader

O exemplo de código a seguir itera por meio de um objeto AdomdDataReader 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

Embora uma instância de um objeto AdomdDataReader esteja aberta, você poderá recuperar informações de esquema, ou metadados, sobre o conjunto de registros atual por meio do método GetSchemaTable. GetSchemaTable retorna um objeto DataTable que é preenchido com as informações de esquema para o conjunto de registros atual. 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, onde 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 objeto 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();
}

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 conjunto de linhas aninhado associado a cada linha, chame o método GetDataReader.