Partage via


Copie de contenu de DataSet

Vous pouvez créer une copie d’un objet DataSet pour pouvoir travailler sur ses données sans affecter les données d’origine ou travailler sur un sous-ensemble des données d’un DataSet. Lorsque vous copiez un DataSet, vous pouvez effectuer l’une des actions suivantes :

  • Créer une copie exacte du DataSet, y compris les informations de schéma, les données, l’état des lignes et leur version.

  • Créer un DataSet qui contient le schéma d’un DataSet existant, mais uniquement les lignes qui ont été modifiées. Vous pouvez retourner toutes les lignes qui ont été modifiées ou seulement celles ayant un DataRowState spécifique. Pour plus d’informations sur les états de ligne, consultez États de ligne et versions de ligne.

  • Copier uniquement le schéma, ou la structure relationnelle, du DataSet, en ne copiant aucune ligne. Les lignes peuvent être importées dans un objet DataTable existant à l'aide de la méthode ImportRow.

Pour créer une copie exacte du DataSet qui inclut à la fois le schéma et les données, utilisez la méthode Copy du DataSet. L’exemple de code suivant montre comment créer une copie exacte du DataSet.

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

Pour créer une copie d’un DataSet qui inclut le schéma et seulement les données représentant les lignes Added, Modified ou Deleted, utilisez la méthode GetChanges du DataSet. Vous pouvez également utiliser GetChanges pour ne retourner que les lignes assorties d’un état de ligne spécifié en passant une valeur DataRowState lors de l’appel de GetChanges. L’exemple de code suivant montre comment passer un DataRowState lors de l’appel de 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);  

Pour créer une copie d’un DataSet qui inclut uniquement le schéma, utilisez la méthode Clone du DataSet. Vous pouvez aussi ajouter des lignes existantes au DataSet cloné à l’aide de la méthode ImportRow du DataTable. ImportRow ajoute à la table spécifiée des données ainsi que des informations d’état et de version de ligne. Les valeurs de colonne ne seront ajoutées que si le nom de colonne est identique et le type de données compatible.

L’exemple de code suivant crée un clone d’un DataSet, puis ajoute à la table Customer du clone du DataSet les lignes du DataSet d’origine relatives aux clients pour lesquels la colonne CountryRegion a la valeur « 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);  

Voir aussi