使用 AdomdDataReader 擷取資料

在取得分析資料時, AdomdDataReader 物件會在額外負荷和互動性之間提供良好的平衡。 AdomdDataReader物件會從分析資料源抓取唯讀、順向、壓平合併的資料流程。 這個未緩衝的資料流可讓程序邏輯有效且循序地處理來自分析資料來源的結果。 因為資料不會快取在記憶體中,所以在抓取大量資料以供顯示之用時, AdomdDataReader 這會是不錯的選擇。

也可以在資料可用時立即取得資料,而不是等待傳回查詢的完整結果,藉此 AdomdDataReader 提升應用程式效能。 AdomdDataReader也可降低系統負擔,因為依預設,這個讀取器在記憶體中一次只會儲存一個資料列。

優化效能的取捨是 AdomdDataReader 物件提供比其他資料抓取方法更少的取出資料相關資訊。 AdomdDataReader物件不支援代表資料或中繼資料的大型物件模型,此物件模型也不允許像資料格回寫等較複雜的分析功能。 不過,此 AdomdDataReader 物件會提供一組強型別方法來抓取資料格集資料,以及用來以表格格式抓取資料格集中繼資料的方法。 此外, AdomdDataReader 也會使用 SelectCommand 方法(從 Microsoft .NET Framework 類別庫的 system.string 命名空間),執行IDbDataReader介面以支援資料系結,以及使用方法來取得資料。

從 AdomdDataReader 擷取資料

若要使用 AdomdDataReader 物件來取出資料,請遵循下列步驟:

  1. 建立物件的新執行個體。

    若要建立類別的新實例 AdomdDataReader ,請呼叫物件的 ExecuteExecuteReader 方法 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 方法。