Share via


Copia di contenuti di dataset

È possibile creare una copia di un DataSet per usare i dati senza influire su quelli originali o per poter usare un subset dei dati contenuti in un DataSet. Quando si copia un DataSet, è possibile:

  • Creare una copia esatta del DataSet, inclusi lo schema, i dati, le informazioni relative allo stato della riga e le versioni di riga.

  • Creare un DataSet contenente lo schema di un DataSet esistente ma solo le righe a cui sono state apportate modifiche. È possibile restituire tutte le righe modificate oppure specificare un determinato DataRowState. Per altre informazioni sugli stati delle righe, vedere Stati e versioni delle righe.

  • Copiare solo lo schema, o struttura relazionale, del DataSet, senza copiare alcuna riga. È possibile importare le righe in un tipo DataTable esistente usando il metodo ImportRow.

Per creare una copia esatta del DataSet in cui siano inclusi sia lo schema che i dati, usare il metodo Copy del DataSet. Nell'esempio di codice seguente viene illustrata la creazione di una copia esatta del DataSet.

Dim copyDataSet As DataSet = customerDataSet.Copy()  
DataSet copyDataSet = customerDataSet.Copy();  

Per creare una copia di un DataSet in cui siano inclusi lo schema e solo i dati che rappresentano righe Added, Modified o Deleted, usare il metodo GetChanges del DataSet. Se si passa il valore DataRowState durante la chiamata del metodo GetChanges, è anche possibile usare il metodo GetChanges per restituire solo le righe a cui sia associato uno stato della riga specificato. Nell'esempio di codice seguente viene illustrato come passare un valore DataRowState quando si chiama il metodo GetChanges.

' Copy all changes.  
Dim changeDataSet As DataSet = customerDataSet.GetChanges()  
' Copy only new rows.  
Dim addedDataSetAs DataSet = _  
    customerDataSet.GetChanges(DataRowState.Added)  
// Copy all changes.  
DataSet changeDataSet = customerDataSet.GetChanges();  
// Copy only new rows.  
DataSet addedDataSet= customerDataSet.GetChanges(DataRowState.Added);  

Per creare una copia di un DataSet in cui sia incluso solo lo schema, usare il metodo Clone del DataSet. È anche possibile aggiungere righe esistenti al DataSet duplicato, usando il metodo ImportRow della DataTable. Il metodo ImportRow consente di aggiungere dati e informazioni relative allo stato e alla versione di riga alla tabella specificata. I valori di colonna vengono aggiunti solo nel caso in cui i nomi di colonna corrispondano e il tipo di dati sia compatibile.

Nell'esempio di codice seguente viene creato un duplicato di un DataSet e vengono aggiunte le righe del DataSet originale alla tabella Customers nel DataSet duplicato per i clienti la cui colonna CountryRegion presenta il valore "Germany".

Dim customerDataSet As New DataSet  
        customerDataSet.Tables.Add(New DataTable("Customers"))  
        customerDataSet.Tables("Customers").Columns.Add("Name", GetType(String))  
        customerDataSet.Tables("Customers").Columns.Add("CountryRegion", GetType(String))  
        customerDataSet.Tables("Customers").Rows.Add("Juan", "Spain")  
        customerDataSet.Tables("Customers").Rows.Add("Johann", "Germany")  
        customerDataSet.Tables("Customers").Rows.Add("John", "UK")  
  
Dim germanyCustomers As DataSet = customerDataSet.Clone()  
  
Dim copyRows() As DataRow = _  
  customerDataSet.Tables("Customers").Select("CountryRegion = 'Germany'")  
  
Dim customerTable As DataTable = germanyCustomers.Tables("Customers")  
Dim copyRow As DataRow  
  
For Each copyRow In copyRows  
  customerTable.ImportRow(copyRow)  
Next  
DataSet customerDataSet = new DataSet();  
customerDataSet.Tables.Add(new DataTable("Customers"));  
customerDataSet.Tables["Customers"].Columns.Add("Name", typeof(string));  
customerDataSet.Tables["Customers"].Columns.Add("CountryRegion", typeof(string));  
customerDataSet.Tables["Customers"].Rows.Add("Juan", "Spain");  
customerDataSet.Tables["Customers"].Rows.Add("Johann", "Germany");  
customerDataSet.Tables["Customers"].Rows.Add("John", "UK");  
  
DataSet germanyCustomers = customerDataSet.Clone();  
  
DataRow[] copyRows =
  customerDataSet.Tables["Customers"].Select("CountryRegion = 'Germany'");  
  
DataTable customerTable = germanyCustomers.Tables["Customers"];  
  
foreach (DataRow copyRow in copyRows)  
  customerTable.ImportRow(copyRow);  

Vedi anche