Utilizzo di un set di dati esterno con Reporting ServicesUsing an External Dataset with Reporting Services

L'oggetto DataSet è fondamentale per il supporto di scenari di dati disconnessi e distribuiti con ADO.NETADO.NET.The DataSet object is central to supporting disconnected, distributed data scenarios with ADO.NETADO.NET. L'oggetto DataSet è una rappresentazione di dati residente in memoria che offre un modello di programmazione relazionale coerente indipendentemente dall'origine dati.The DataSet object is a memory-resident representation of data that provides a consistent relational programming model regardless of the data source. Questo oggetto può essere utilizzato con più origini dati diverse, con dati XML o per gestire i dati locali dell'applicazione.It can be used with multiple different data sources, with XML data, or to manage data local to the application. L'oggetto DataSet rappresenta un set di dati completo, che include tabelle correlate, vincoli e relazioni tra le tabelle.The DataSet object represents a complete set of data, including related tables, constraints, and relationships among the tables. Grazie alla versatilità dell'oggetto DataSet nell'archiviazione e nell'esposizione dei dati, i dati possono spesso essere elaborati e trasformati in un oggetto DataSet prima della creazione di qualsiasi report con tali dati.Because of the DataSet object's versatility in storing and exposing data, your data may often be processed and transformed into a DataSet object before any reporting on that data occurs.

Con le estensioni per l'elaborazione dati di Reporting ServicesReporting Services, è possibile integrare qualsiasi oggettoDataSet personalizzato creato dalle applicazioni esterne.With Reporting ServicesReporting Services data processing extensions, you can integrate any custom DataSet objects that are created by external applications. A tale scopo, è possibile creare un'estensione per l'elaborazione dati personalizzata in Reporting ServicesReporting Services che funga da ponte tra l'oggettoDataSet e il server di report.To accomplish this, you create a custom data processing extension in Reporting ServicesReporting Services that acts like a bridge between your DataSet object and the report server. La maggior parte del codice per l'elaborazione di questo oggettoDataSet è inclusa nella classe DataReader creata.Most of the code for processing this DataSet object is contained in the DataReader class that you create.

Il primo passaggio nell'esposizione dell'oggetto DataSet nel server di report consiste nell'implementare un metodo specifico del provider nella classe DataReader che consente di popolare un oggetto DataSet.The first step in exposing your DataSet object to the report server is to implement a provider specific method in your DataReader class that can populate a DataSet object. Nell'esempio seguente viene illustrato come caricare dati statici in un oggetto DataSet usando un metodo specifico del provider nella classe DataReader.The following example shows how to load static data into a DataSet object by using a provider-specific method in your DataReader class.

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

Dopo aver creato o recuperato il set di dati, è possibile usare l'oggetto DataSet nelle implementazioni dei membri Read, GetValue, GetName, GetOrdinal,GetFieldType e FieldCount della classe DataReader.Once you create or retrieve your dataset, you can use the DataSet object in your implementations of the Read, GetValue, GetName, GetOrdinal, GetFieldType, and FieldCount members of the DataReader class.

Vedere ancheSee Also

Estensioni di Reporting Services Reporting Services Extensions
Implementazione di un'estensione per l'elaborazione dati Implementing a Data Processing Extension
Libreria di estensioni di Reporting ServicesReporting Services Extension Library