Copiando conteúdo do DataSet

Você pode criar uma cópia de um DataSet para que possa trabalhar com dados sem afetar os dados originais ou trabalhar com um subconjunto de dados de um DataSet. Ao copiar um DataSet, você pode:

  • Criar uma cópia exata do DataSet, incluindo o esquema, os dados, as informações de estado de linha e as versões de linha.

  • Crie DataSet contendo o esquema de um DataSet existente, mas somente as linhas que foram alteradas. Você pode retornar todas as linhas que foram modificadas ou especificar o DataRowState específico. Para obter mais informações sobre estados de linha, consulte Estados de linha e versões de linha.

  • Copie apenas o esquema ou a estrutura relacional do DataSet, sem copiar nenhuma linha. As linhas podem ser importadas em um DataTable existente usando o ImportRow.

Para criar uma cópia exata do DataSet que inclua o esquema e os dados, use o método Copy do DataSet. O exemplo a seguir mostra como criar uma cópia exata do DataSet.

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

Para criar uma cópia de um DataSet que inclua o esquema e somente os dados que representem as linhas Added, Modified ou Deleted, use o método GetChanges do DataSet. Você também pode usar GetChanges para retornar somente linhas com um estado de linha especificado passando um valor de DataRowState ao chamar GetChanges. O exemplo de código a seguir mostra como passar um DataRowState ao chamar 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);  

Para criar uma cópia de um DataSet que inclua apenas o esquema, use o método Clone do DataSet. Você também pode adicionar linhas existentes ao DataSet clonado usando o método ImportRow do DataTable. ImportRow adiciona dados, estado de linha e informações sobre versão de linha à tabela especificada. Os valores de coluna são adicionados somente onde o nome da coluna corresponde e o tipo de dados é compatível.

O exemplo de código a seguir cria um clone de um DataSet e adiciona as linhas do DataSet original à tabela Customers no clone do DataSet para os clientes onde a coluna de CountryRegion tem o valor “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);  

Confira também