0
DataTable Table = CreateTableStucture();
DataTable Table_2 = Table.Clone();
Table.Rows.Add(0, "A", "B");
Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");
Table.Merge(Table_2);

为什么在执行此代码对象后:Table 的行中的值仅来自 Table_2,并且没有按应有的方式合并。这些表必须具有相同的结构,因为我的程序需要它。

编辑 1。

    DataTable Table = new DataTable("table");
    DataColumn KeyCol = new DataColumn("Key", typeof(int));
    DataColumn Col1 = new DataColumn("col1", typeof(string));
    DataColumn Col2 = new DataColumn("col2", typeof(string));
    DataColumn Col3 = new DataColumn("col3", typeof(string));
    DataColumn Col4 = new DataColumn("col4", typeof(string));
    DataColumn Col5 = new DataColumn("col5", typeof(string));
    Table.Columns.Add(KeyCol);
    Table.Columns.Add(Col1);
    Table.Columns.Add(Col2);
    Table.Columns.Add(Col3);
    Table.Columns.Add(Col4);
    Table.Columns.Add(Col5);
    Table.Constraints.Add("keyCon", KeyCol, true);
    DataTable Table_2 = new DataTable();
    Table_2 = Table.Clone();
    Table.Rows.Add(0, "A", "B");
    Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");
    Table.Merge(Table_2);

即使我以这种方式创建它们也行不通。

4

2 回答 2

3

问题是你有一个主键冲突。

DataColumn KeyCol = new DataColumn("Key", typeof(int));
//...
Table.Constraints.Add("keyCon", KeyCol, true);
//...
Table.Rows.Add(0, "A", "B");
Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");

您对两行都有一个主键0,将第二行更改为1它应该可以工作。

于 2013-10-14T14:09:26.390 回答
1

您需要使用Table.Copy()而不是Data.Clone()

来自 MSDN:

DataTable.Copy 复制此 DataTable 的结构和数据。

DataTable.Clone 克隆 DataTable 的结构,包括所有 DataTable 架构和约束。

于 2013-10-14T13:10:11.500 回答