【问题标题】:Datatable.Merge doesn't workDatatable.Merge 不起作用
【发布时间】:2013-10-22 01:29:40
【问题描述】:
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);

即使我以这种方式创建它们也不起作用。

【问题讨论】:

  • 能否请您展示您的 CreateTableStucture() 方法?
  • 这些表必须具有相同的结构,但是在第一个表中插入 3 列,在第二个表中插入 4 列,请显示 CreateTableStructure 的代码
  • 试试 Table.Merge(Table_2, false, MissingSchemaAction.Add)
  • 为什么你的克隆表比原表多一列?
  • 因为其余的列都自动填充了dbnulls,原来这个表有11列。很抱歉,我无法向您展示此方法,因为创建此表的方法有几种,而且它们运行良好,因为它们经过了数千次测试。

标签: c# datatable merge


【解决方案1】:

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

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,它应该可以工作。

【讨论】:

  • 嗯,我知道这一定是关键冲突。此代码必须用 Table_2 中的相应值覆盖 Table 中的每个值(仅当 Table_2 中的值!=DBNULL 时)。是否可以通过合并来做到这一点,或者我必须编写自己的方法?
  • 不,您不能使用 Merge。合并旨在向表中添加额外的行,而不是修改表中的现有行。
【解决方案2】:

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

来自 MSDN:

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

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

【讨论】:

  • 我认为你没有抓住重点。 OP 需要 merge 而不是在第一个上复制第二个
  • 确实我误读了这个问题。我以为 OP 创建了 DataTable,克隆到 DataTable2,添加了行,然后尝试将一个空的 DataTable 与 DataTable2 合并。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2011-10-31
  • 2016-04-21
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多