一、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 | |
Detached | 1 |
已创建该行,但它不是任何 DataRowCollection 的一部分。 DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。 |
Modified | 16 |
该行已被修改,AcceptChanges() 尚未调用。 |
Unchanged | 2 |
自上一次调用 AcceptChanges() 之后,该行未更改。 |
这是我遇到的唯二次遇到 开放式并发冲突,希望对大家有所帮助。