C# 开放式并发冲突报错处理

 一、DataSet.GetChanges() 之后又修改了数据数据源

  1、调用DataSet.GetChanges()获取数据源中改变的数据

  var data = ViewData.GetChanges();

  2、为新增的数据 data 加上唯一标识

  var counter=0;
  foreach (var dtlRow in data.Rows)

  {
    dtlRow.BeginEdit();
    dtlRow.LINE_SEQ = counter++;
    dtlRow.EndEdit();
  }

  因为在数据源DataSet.GetChanges()之后又对数据源进行了修改,

  在保存Save(data )时爆出了,开放式并发冲突的错误。

  解决:调换了1和2的先后顺序,在数据源DataSet.GetChanges()之前,为新增加上唯一标识。

     在调用Save(data )保存数据,就不在报错了。

二、 因 DataRow 对象的RowState 属性 状态 而引起的 开放式并发冲突

 情况:新增了一条数据 DataRow 的 RowState属性为 Added,

    因为使用了公司大佬的框架,中途被修改为了 Modified,

       在保存的时候,爆出了开放式并发冲突;

 解决:

  1、DataRow.AcceptChanges()  之后  DataRow.RowState变为了 Unchanged

  2、DataRow.SetAdd(); DataRow.RowState 变为了 Added

     再保存就不会出错了。

Added 4

该行已添加到 DataRowCollection 中,AcceptChanges() 尚未调用。

Deleted 8

该行已通过 Delete() 的 DataRow 方法被删除。

Detached 1

已创建该行,但它不是任何 DataRowCollection 的一部分。 DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。

Modified 16

该行已被修改,AcceptChanges() 尚未调用。

Unchanged 2

自上一次调用 AcceptChanges() 之后,该行未更改。

这是我遇到的唯二次遇到 开放式并发冲突,希望对大家有所帮助。

原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/10950393.html