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

Il DataSet oggetto è fondamentale per il supporto disconnessi e distribuiti gli scenari di dati con ADO.NETADO.NET.The DataSet object is central to supporting disconnected, distributed data scenarios with ADO.NETADO.NET. Il DataSet oggetto è una rappresentazione residente in memoria dei dati che fornisce 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. Il DataSet oggetto rappresenta un set completo di dati, incluse le tabelle correlate, vincoli e relazioni tra tabelle.The DataSet object represents a complete set of data, including related tables, constraints, and relationships among the tables. Perché il set di dati versatilità dell'oggetto per l'archiviazione e l'esposizione dei dati, i dati possono spesso essere elaborata e trasformata in un DataSet dell'oggetto prima che venga eseguita qualsiasi reporting su 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 Reporting ServicesReporting Services estensioni per l'elaborazione dati, è possibile integrare qualsiasi personalizzato DataSet gli oggetti creati da 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, si crea un'estensione di elaborazione dati personalizzata in Reporting ServicesReporting Services che funga da ponte tra il DataSet oggetto 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 DataSet nell'oggetto è contenuto il DataReader classe creata.Most of the code for processing this DataSet object is contained in the DataReader class that you create.

Il primo passaggio nell'esposizione del set di dati oggetto al server di report consiste nell'implementare un metodo specifico del provider nel DataReader classe che è possibile popolare un DataSet oggetto.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 una DataSet oggetto utilizzando un metodo specifico del provider nel DataReader classe.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 recuperare il set di dati, è possibile utilizzare il DataSet oggetto nelle implementazioni del lettura, GetValue, GetName, GetOrdinal, GetFieldType, e FieldCount i membri del DataReader classe.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 di elaborazione dei dati Implementing a Data Processing Extension
Libreria di estensioni di Reporting ServicesReporting Services Extension Library