【问题标题】:C# - Does DataTable.Merge() add duplicates or update?C# - DataTable.Merge() 是否添加重复项或更新?
【发布时间】:2016-04-21 13:25:43
【问题描述】:

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

我想做这样的事情:

datatable1.Merge(datatable2);

我想知道,如果这两个表之间存在重复,重复的会被添加到datatable1,还是会更新datatable1中的值?

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

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

【问题讨论】:

  • 您知道有很多关于如何在 DataTable 中查找重复项的示例,您是否在 Google 上搜索过任何... ..

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


【解决方案1】:

如果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);

【讨论】:

    【解决方案2】:

    来自Merge documentaton的最后一段

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多