使用 AdomdDataReader 检索数据

在检索分析数据时, AdomdDataReader 对象可在开销和交互性之间提供良好的平衡。 AdomdDataReader对象从分析数据源检索只读、只进的平展数据流。 此未经缓冲的数据流使过程逻辑能够有效地按顺序处理分析数据源的结果。 由于数据未缓存在内存中,因此在检索大量数据时,这是一个不错的 AdomdDataReader 选择。

还可以通过在数据可用时立即检索数据来提高应用程序的 AdomdDataReader 性能,而不是等待返回查询的完整结果。 AdomdDataReader还会减少系统开销,因为默认情况下,此读取器一次仅在内存中存储一行。

优化性能的折衷在于,对象提供的 AdomdDataReader 数据比其他数据检索方法更少。 AdomdDataReader对象不支持用于表示数据或元数据的大型对象模型,此对象模型也不允许使用更复杂的分析功能,如单元写回。 但是,该 AdomdDataReader 对象确实提供一组用于检索单元集数据的强类型方法,以及用于以表格格式检索单元集元数据的方法。 此外, AdomdDataReader 还实现了IDbDataReader接口,以支持数据绑定,以及如何使用SelectCommand方法从 Microsoft .NET Framework 类库的system.object命名空间检索数据。

使用 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提供一系列类型化取值函数方法,这些方法可让你访问其本机数据类型的列值。 如果您知道列值的基础数据类型,则类型化取值函数方法可减少检索列值时所需的类型转换量,从而提供最佳性能。

      某些可用的类型化访问器方法包括 GetDateTimeGetDoubleGetInt32 。 有关类型化取值函数方法的完整列表,请参阅 AdomdDataReader

  3. 关闭读取器。

    使用 AdomdDataReader 完对象后,应始终调用 Close 方法。 当 "对象的实例 AdomdDataReader 处于打开状态时, AdomdConnection 将以独占 AdomdDataReader 方式使用。 你将无法在的 AdomdConnection 实例上运行任何命令,包括创建另一个 AdomdDataReaderSystem.Xml。XmlReader,直到关闭原始 AdomdDataReader

使用 AdomdDataReader 检索数据的示例

下面的代码示例循环访问 AdomdDataReader 对象,并以字符串的形式返回每一行的前两个值。

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 中,记录集的每一列都将占一行。 架构表行的每个列都映射到在单元集中返回的列的属性,其中 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 方法。