• 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() 之后,该行未更改。

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

  • 相关阅读:
    小猪存钱罐
    SSL与HTTPS协议
    KVM之XFS磁盘扩容
    vue学习笔记(一)
    ant打包总结
    github上传代码总结
    java中map遍历的总结
    angularjs初学总结
    angularjs常用指令
    github上传代码总结
  • 原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/10950393.html
Copyright © 2020-2023  润新知