Share via


AdomdDataReader を使用したデータの取得

分析データを取得する場合、オブジェクトは AdomdDataReader オーバーヘッドと対話性のバランスを取れます。 オブジェクト AdomdDataReader は、分析データ ソースからデータの読み取り専用の順方向専用のフラット化ストリームを取得します。 このようにデータ ストリームがバッファリングされないことで、手順ロジックにより、分析データソースから取得した結果を順次効率的に処理することができます。 これにより、データ AdomdDataReader がメモリにキャッシュされないので、表示目的で大量のデータを取得する場合に最適な選択肢になります。

AdomdDataReader 、クエリの完全な結果が返されるのを待たずに、使用可能なデータをすぐに取得することで、アプリケーションのパフォーマンスを向上させる場合もあります。 既定 AdomdDataReader では、このリーダーはメモリに一度に 1 行しか格納しないので、 によってシステムのオーバーヘッドも削減されます。

最適化されたパフォーマンスのトレードオフは AdomdDataReader 、オブジェクトが取得したデータに関する情報を他のデータ取得方法よりも少なく提供することです。 オブジェクト AdomdDataReader は、データまたはメタデータを表す大きなオブジェクト モデルをサポートしていない。また、このオブジェクト モデルでは、セルの書き戻しのようなより複雑な分析機能を使用できない。 ただし、 オブジェクト AdomdDataReader には、セルセット データを取得するための一連の強力に型指定されたメソッドと、表形式でセルセットメタデータを取得するためのメソッドが提供されます。 AdomdDataReaderさらに、 は、データ バインディングをサポートし、Microsoft .NET Framework クラス ライブラリの System.Data 名前空間から SelectCommand メソッドを使用してデータを取得するための IDbDataReader インターフェイスを実装します。

AdomdDataReader からのデータの取得

オブジェクトを使用して AdomdDataReader データを取得するには、次の手順に従います。

  1. このオブジェクトの新しいインスタンスを作成します。

    クラスの新しいインスタンスを作成するには AdomdDataReader 、 オブジェクトの Execute または メソッド ExecuteReader を呼び出 AdomdCommand します。

  2. データを取得します。

    コマンドがクエリを実行すると、ADOMD.NET は結果セット形式 (XML for Analysis 仕様で説明されている表形式) で結果を返し、オブジェクトのデータをフラット化AdomdDataReaderします。 このようなデータで、さまざまな次元を考慮して分析データをクエリする場合、表形式は一般的ではありません。

    ADOMD.NET は、これらの表形式の結果を、次のメソッドのいずれかを使用して要求されるまでクライアントのネットワーク バッファーに格納します。

    • Read オブジェクトの AdomdDataReader メソッドを呼び出します。

      メソッド Read は、クエリ結果から行を取得します。 その後、列の名前または序数参照を Item プロパティに渡して、返された行の各列にアクセスできます。 たとえば、現在の行の最初の列の名前は ColumnName になります。 次に、reader[0].ToString() または reader["ColumnName"].ToString() は、現在の行の最初の列のコンテンツを返します。

    • 型指定されたアクセサー メソッドのいずれかを呼び出します。

      には AdomdDataReader 、一連の型指定されたアクセサー メソッド (ネイティブ データ型の列値にアクセスできるメソッド) が提供されます。 列値の基になるデータ型がわかっている場合は、型指定されたアクセサー メソッドを使用することで列値の取得時に必要な型変換が削減され、その結果、最良のパフォーマンスを実現できます。

      使用できる型指定されたアクセサー メソッドの一部には、GetDateTimeおよび がありますGetDoubleGetInt32。 型指定されたアクセサー メソッドの完全な一覧については、「」を参照してください AdomdDataReader

  3. AdomdDataReader を閉じます。

    オブジェクトの使用が完了したら Close 、常に メソッドを呼び出す必要 AdomdDataReader があります。 'object' のインスタンス AdomdDataReader が開いている間、 AdomdConnection は、その によって排他的に使用されています AdomdDataReader。 のインスタンスに対して、別のコマンドまたはインスタンスの AdomdConnection作成を含むコマンド AdomdDataReader 実行System.Xml。元の を閉じるまで AdomdDataReader、XmlReader。

AdomdDataReader からのデータ取得の例

次のコード例では、 オブジェクトを反復処理 AdomdDataReader し、各行から最初の 2 つの値を文字列として返します。

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

AdomdDataReader からのメタデータの取得

オブジェクトのインスタンスが開いている AdomdDataReader 間に、 メソッドを使用して、現在のレコードセットに関するスキーマ情報 (メタデータ) を取得 GetSchemaTable できます。 GetSchemaTable は、現在のレコードセットのスキーマ情報が設定された DataTable オブジェクトを返します。 DataTable は、レコードセットの各列に対して 1 つの行を含みます。 スキーマ テーブル行の各列は、セルセットに返される列のプロパティにマップされます。ここで、ColumnName はプロパティの名前で、列の値はプロパティの値です。

AdomdDataReader からのメタデータ取得の例

次のコード例では、 オブジェクトのスキーマ情報を書き込 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();  
}  

複数の結果セットの取得

データ マイニングは入れ子になったテーブルの概念をサポートします。入れ子になったテーブルは、ADOMD.NET では入れ子になった行セットとして示されます。 各行に関連付けられている入れ子になった行セットを取得するには、 メソッドを呼び出 GetDataReader します。