Copia dei contenuti di un DataSet

È possibile creare una copia di un DataSet, in modo da consentire l'utilizzo dei dati senza influire sui dati originali o l'utilizzo di un sottoinsieme 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 o specificare un determinato DataRowState. Per ulteriori informazioni sugli stati delle righe, vedere Stati delle righe e versioni delle righe.
  • Copiare solo lo schema, o struttura relazionale, del DataSet, senza copiare alcuna riga. È possibile importare le righe in una DataTable esistente utilizzando ImportRow.

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

Dim copyDS As DataSet = custDS.Copy()
[C#]
DataSet copyDS = custDS.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, utilizzare il metodo GetChanges del DataSet. Passando il valore DataRowState quando si chiama il metodo GetChanges, è inoltre possibile utilizzare tale metodo per restituire solo le righe a cui sia associato uno stato di riga specifico. Nell'esempio di codice seguente viene mostrato come passare un valore DataRowState quando si chiama il metodo GetChanges.

' Copy all changes.
Dim changeDS As DataSet = custDS.GetChanges()
' Copy only new rows.
Dim addedDS As DataSet = custDS.GetChanges(DataRowState.Added)
[C#]
// Copy all changes.
DataSet changeDS = custDS.GetChanges();
// Copy only new rows.
DataSet addedDS = custDS.GetChanges(DataRowState.Added);

Per creare una copia di un DataSet in cui sia incluso solo lo schema, utilizzare il metodo Clone del DataSet. È inoltre possibile aggiungere righe esistenti al DataSet clonato, utilizzando 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 verranno aggiunti solo nel caso in cui i nomi di colonna corrispondano e il tipo di dati sia compatibile.

L'esempio di codice seguente consente di creare un clone di un DataSet, quindi di aggiungere le righe del DataSet esistente alla tabella Customers nel clone DataSet per i clienti la cui colonna Country abbia valore "Germany".

Dim custGermanyDS As DataSet = custDS.Clone()

Dim copyRows() As DataRow = custDS.Tables("Customers").Select("Country = 'Germany'")

Dim custTable As DataTable = custGermanyDS.Tables("Customers")
Dim copyRow As DataRow

For Each copyRow In copyRows
  custTable.ImportRow(copyRow)
Next
[C#]
DataSet custGermanyDS = custDS.Clone();

DataRow[] copyRows = custDS.Tables["Customers"].Select("Country = 'Germany'");

DataTable custTable = custGermanyDS.Tables["Customers"];

foreach (DataRow copyRow in copyRows)
  custTable.ImportRow(copyRow);

Vedere anche

Creazione e utilizzo di DataSet | Classe DataSet | Classe DataTable