DataSet 對像是支援使用 ADO.NET 中斷聯機分散式數據案例的核心。 DataSet 對像是數據的記憶體駐地表示法,不論數據源為何,都會提供一致的關係型程序設計模型。 它可以與多個不同的數據源、XML 數據搭配使用,或管理應用程式本機的數據。 DataSet 物件代表一組完整的數據,包括數據表之間的相關數據表、條件約束和關聯性。 由於 DataSet 物件在儲存和公開數據方面具有多功能性,因此在發生該數據的任何報告之前,您的數據通常會處理並轉換成 DataSet 物件。
透過 Reporting Services 數據處理延伸模組,您可以整合外部應用程式所建立的任何自定義 DataSet 物件。 若要達成此目的,您可以在 Reporting Services 中建立自定義數據處理延伸模組,就像 DataSet 對象與報表伺服器之間的網橋一樣。 處理此 DataSet 物件的大部分程式代碼都包含在您建立的 DataReader 類別中。
將 DataSet 物件公開至報表伺服器的第一個步驟,是在可以填入 DataSet 物件的 DataReader 類別中實作提供者特定方法。 下列範例示範如何使用 DataReader 類別中的提供者特定方法,將靜態數據載入 DataSet 物件。
'Private members of the DataReader class
Private m_dataSet As System.Data.DataSet
Private m_currentRow As Integer
'Method to create a dataset
Friend Sub CreateDataSet()
' Create a dataset.
Dim ds As New System.Data.DataSet("myDataSet")
' Create a data table.
Dim dt As New System.Data.DataTable("myTable")
' Create a data column and set various properties.
Dim dc As New System.Data.DataColumn()
dc.DataType = System.Type.GetType("System.Decimal")
dc.AllowDBNull = False
dc.Caption = "Number"
dc.ColumnName = "Number"
dc.DefaultValue = 25
' Add the column to the table.
dt.Columns.Add(dc)
' Add 10 rows and set values.
Dim dr As System.Data.DataRow
Dim i As Integer
For i = 0 To 9
dr = dt.NewRow()
dr("Number") = i + 1
' Be sure to add the new row to the DataRowCollection.
dt.Rows.Add(dr)
Next i
' Fill the dataset.
ds.Tables.Add(dt)
' Use a private variable to store the dataset in your
' DataReader.
m_dataSet = ds
' Set the current row to -1.
m_currentRow = - 1
End Sub 'CreateDataSet
// Private members of the DataReader class
private System.Data.DataSet m_dataSet;
private int m_currentRow;
// Method to create a dataset
internal void CreateDataSet()
{
// Create a dataset.
System.Data.DataSet ds = new System.Data.DataSet("myDataSet");
// Create a data table.
System.Data.DataTable dt = new System.Data.DataTable("myTable");
// Create a data column and set various properties.
System.Data.DataColumn dc = new System.Data.DataColumn();
dc.DataType = System.Type.GetType("System.Decimal");
dc.AllowDBNull = false;
dc.Caption = "Number";
dc.ColumnName = "Number";
dc.DefaultValue = 25;
// Add the column to the table.
dt.Columns.Add(dc);
// Add 10 rows and set values.
System.Data.DataRow dr;
for(int i = 0; i < 10; i++)
{
dr = dt.NewRow();
dr["Number"] = i + 1;
// Be sure to add the new row to the DataRowCollection.
dt.Rows.Add(dr);
}
// Fill the dataset.
ds.Tables.Add(dt);
// Use a private variable to store the dataset in your
// DataReader.
m_dataSet = ds;
// Set the current row to -1.
m_currentRow = -1;
}
public bool Read()
{
m_currentRow++;
if (m_currentRow >= m_dataSet.Tables[0].Rows.Count)
{
return (false);
}
else
{
return (true);
}
}
public int FieldCount
{
// Return the count of the number of columns, which in
// this case is the size of the column metadata
// array.
get { return m_dataSet.Tables[0].Columns.Count; }
}
public string GetName(int i)
{
return m_dataSet.Tables[0].Columns[i].ColumnName;
}
public Type GetFieldType(int i)
{
// Return the actual Type class for the data type.
return m_dataSet.Tables[0].Columns[i].DataType;
}
public Object GetValue(int i)
{
return m_dataSet.Tables[0].Rows[m_currentRow][i];
}
public int GetOrdinal(string name)
{
// Look for the ordinal of the column with the same name and return it.
// Returns -1 if not found.
return m_dataSet.Tables[0].Columns[name].Ordinal;
}
建立或擷取數據集之後,您可以在 DataReader 類別的 Read、GetValue、GetName、GetOrdinal、GetFieldType 和 FieldCount 成員的實作中使用 DataSet 物件。
另請參閱
Reporting Services 延伸模組
實作數據處理延伸模組
Reporting Services 擴充功能連結庫