C# - DataTable.Merge()是否添加重复项或更新?

时间:2016-01-15 20:58:48

标签: c# .net sql-server datatable merge

我有2个DataTables。 1表示我的表中来自SqlServer的当前行,1表示我想要添加的新行。

我想做类似的事情:

datatable1.Merge(datatable2);

我试图弄清楚,如果这两个表之间存在重复,是否会将副本添加到datatable1,还是会更新datatable1中的值?

我需要在datatable1中简单地更新重复项,并将非重复项添加到datatable1中。

我搜索了MSDN,但我找不到明确的答案。

2 个答案:

答案 0 :(得分:0)

来自Merge documentaton

的最后一段
  

将新的源DataTable合并到目标中时,DataRowState值为Unchanged,Modified或Deleted的任何源行都与具有相同主键值的目标行匹配。 DataRowState值为Added的源行与具有与新源行相同的主键值的新目标行匹配。

它将更新具有相同主键的任何行。主键由DataTable.PrimaryKey属性

设置

答案 1 :(得分:0)

Merge documentation包含以下段落的备注部分

  

执行合并时,默认情况下,合并前对现有数据所做的更改保留。开发人员可以通过调用此方法的其他两个重载之一来修改此行为,并为 preserveChanges 参数指定false值。

但是,reference source显示

public void Merge(DataTable table)
{
    Merge(table, false, MissingSchemaAction.Add);
}

即。它实际上用preserveChanges=false调用另一个重载。

看起来你应该得到理想的行为。但是,如果您想要绝对确定,请明确调用另一个overload并像这样传递preserveChanges=false

datatable1.Merge(datatable2, false);