Menggunakan himpunan data eksternal dengan Reporting Services

Objek Himpunan Data adalah pusat untuk mendukung skenario data terputus dan terdistribusi dengan ADO.NET. Objek Himpunan Data adalah representasi data residen memori yang menyediakan model pemrograman relasional yang konsisten terlepas dari sumber data. Ini dapat digunakan dengan beberapa sumber data yang berbeda, dengan data XML, atau untuk mengelola data lokal ke aplikasi. Objek Himpunan Data mewakili kumpulan data lengkap, termasuk tabel terkait, batasan, dan hubungan di antara tabel. Karena fleksibilitas objek DataSet dalam menyimpan dan mengekspos data, data Anda mungkin sering diproses dan diubah menjadi objek Himpunan Data sebelum pelaporan pada data tersebut terjadi.

Dengan ekstensi pemrosesan data Reporting Services, Anda dapat mengintegrasikan objek Himpunan Data kustom apa pun yang dibuat oleh aplikasi eksternal. Untuk mencapai integrasi ini, Anda membuat ekstensi pemrosesan data kustom di Reporting Services yang bertindak seperti jembatan antara objek DataSet Anda dan server laporan. Sebagian besar kode untuk memproses objek Himpunan Data ini terkandung dalam kelas DataReader yang Anda buat.

Langkah pertama dalam mengekspos objek Himpunan Data Anda ke server laporan adalah menerapkan metode khusus penyedia di kelas DataReader Anda yang dapat mengisi objek Himpunan Data. Contoh berikut menunjukkan cara memuat data statis ke dalam objek Himpunan Data dengan menggunakan metode khusus penyedia di kelas DataReader Anda.

'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;  
}  

Setelah membuat atau mengambil himpunan data, Anda dapat menggunakan objek Himpunan Data dalam implementasi anggota Read, GetValue, GetName, GetOrdinal, GetFieldType, dan FieldCount dari kelas DataReader.