Partilhar via


Copiando o conteúdo do conjunto de dados

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 dos dados de um DataSet. Ao copiar um DataSet, você pode:

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

  • Crie um DataSet que contenha o esquema de um DataSet existente, mas apenas linhas que foram modificadas. Você pode retornar todas as linhas que foram modificadas ou especificar um 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 para um existente DataTable usando ImportRowo .

Para criar uma cópia exata do DataSet que inclui esquema e dados, use o Copy método do DataSet. O exemplo de código 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 inclui esquema e somente os dados que representam linhas Adicionadas, Modificadas ou Excluídas, use o GetChangesmétodo do DataSet. Você também pode usar GetChanges para retornar somente linhas com um estado de linha especificado passando um valor 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 inclui apenas o esquema, use o Clonemétodo do DataSet. Você também pode adicionar linhas existentes ao DataSet clonado usando o método ImportRow do DataTable. ImportRow adiciona dados, estado da linha e informações de versão da linha à tabela especificada. Os valores de coluna são adicionados somente quando 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, em seguida, adiciona as linhas do DataSet original à tabela Customers no clone DataSet para clientes onde a coluna 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);  

Consulte também