2009-10-19 90 views
2

我想在不调用DataTable.Copy()的情况下将DataTable添加到多个数据集。简单地复制DataTable会使内存中的数据量增加一倍,并使我管理其变化。这个问题的存在是因为我正在实现一个细节表解决方案,其中一个细节表可以有多个主表。ADO .NET - 将数据表添加到多个数据集

如果有帮助,请考虑这个片段,并由此产生皱眉脸。

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 :-(

有没有什么专业的建议呢?谢谢!

回答

1

你不能没有复制这样做,因为数据集被设计成可移动的,并且independantly更新,因此,它们必须包括数据本身,不仅仅是一个数据参考...

+0

对不起,这是没有意义的,因为DataTables是引用类型。行也是如此。 – 2009-10-19 19:22:05

+0

Henk ...我对word引用的使用与引用类型和值类型之间的.Net区别无关。在这种情况下,从技术上讲,DataSet本身不是引用....即使保存数据集的变量,或指向它的变量是引用变量,并且数据集是引用Type,... DataSet本身在堆上)不是数据库中数据的“参考”,而是数据库的副本,并包含所有数据。 – 2010-03-25 15:40:15

3

DataTable类有一个DataSet属性,这意味着它被有意设计为属于(至多)1个DataSet。同样,DataRow有一个Table属性。

A DataTable具有ChildRelationsParentRelations特性。如果Datatable可能属于多于1个数据集,则它们将不明确。因为所有关系的集合都属于DataSet,并且关系名称只在1个DataSet中强制唯一。

可能有更多(和更好)的原因,为什么无法在DataSets之间共享表。