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);