2009-10-19 10 views
2

Je souhaite ajouter un DataTable à plusieurs DataSet sans appeler DataTable.Copy(). La simple copie du DataTable double la quantité de données en mémoire et me permet de gérer ses modifications. Ce problème existe car j'implémente une solution de tables de détail dans laquelle une table de détails peut avoir plusieurs maîtres.ADO .NET - Ajout d'un DataTable à plusieurs DataSet

Si cela vous aide, considérez cet extrait et le visage frowny résultant.

DataTable table1 = GetDataTable(); // 100 rows of data 
DataTable table2 = table1; 

DataSet1 dataset1 = new DataSet(); 
DataSet2 dataset2 = new DataSet(); 

dataset1.Tables.Add(table1); 
dataset2.Tables.Add(table2); // fails because table2 already exists in dataset1 :-(

Des idées professionnelles existent là? Merci!

Répondre

1

Vous ne pouvez pas le faire sans copier parce que DataSets sont conçus pour être mobiles et actualisable indépendamment, par conséquent, ils doivent contenir les données elles-mêmes, pas seulement une référence aux données ...

+0

Désolé, cela n'a aucun sens puisque les DataTables sont des types de références. Et ainsi sont les rangs. –

+0

Henk ... Mon utilisation de la référence de mot n'a rien à voir avec la distinction .Net entre les types de référence et les types de valeur. Dans ce contexte, techniquement, les DataSets eux-mêmes ne sont pas des références .... même si la variable qui contient l'ensemble de données, ou les pointe vers lui est une variable de référence, et un dataset est un Type de référence, ... Le DataSet lui-même sur le tas) n'est pas une "référence" aux données dans la base de données, il s'agit d'une copie de, et comprend en son sein toutes ces données. –

3

Le La classe DataTable a une propriété DataSet, ce qui signifie qu'elle a été intentionnellement conçue pour appartenir à (au plus) 1 DataSet. De même, un DataRow a une propriété Table.

Un DataTable a ChildRelations et ParentRelations propriétés. Ils seraient ambigus si un Datatable pouvait appartenir à plus d'un DataSet. Parce que la collection de toutes les relations appartient à l'ensemble de données, et les noms de relation sont seulement imposés pour être unique dans 1 DataSet.

Il y a probablement plus (et mieux) de raisons pour lesquelles une table ne peut pas être partagée entre des DataSets.