问题现象:
对datatable做清空动作出现异常,异常记录如下,
异常堆栈:
System.ArgumentNullException: 值不能为空。
参数名: key
在 System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
在 System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
在 System.Data.DataView.ResetRowViewCache()
在 System.Data.DataView.MaintainDataView(ListChangedType changedType, DataRow row, Boolean trackAddRemove)
在 System.Data.DataViewListener.MaintainDataView(ListChangedType changedType, DataRow row, Boolean trackAddRemove)
在 System.Data.Index.<>c__DisplayClass5.<MaintainDataView>b__4(DataViewListener listener, ListChangedType type, DataRow row, Boolean track)
在 System.Data.Listeners`1.Notify[T1,T2,T3](T1 arg1, T2 arg2, T3 arg3, Action`4 action)
在 System.Data.Index.MaintainDataView(ListChangedType changedType, Int32 record, Boolean trackAddRemove)
在 System.Data.Index.Reset()
在 System.Data.DataTable.ResetInternalIndexes(DataColumn column)
在 System.Data.DataTable.Clear(Boolean clearAll)
在 System.Data.DataTable.Clear()
相关代码
----
GoldRT.Tables[3].PrimaryKey = new DataColumn[] { GoldRT.Tables[3].Columns["a"], GoldRT.Tables[3].Columns["b"], GoldRT.Tables[3].Columns["c"], GoldRT.Tables[3].Columns["d"] }; //设置主键 当有重复数据时 合并时会自动丢弃
---
lastdv = GoldRT.Tables[3].DefaultView;
--------
GoldRT.Tables[3].Clear();
GoldRT.Tables[3].Merge(newDataSet.Tables[3]);
所有表中的所有行都被移除。 如果表中有任何将使子行孤立的强制子关系,则生成异常。
能否详细说明一下?
表被锁
从哪个查看到是被锁吗?
GoldRT.Tables.Count是多少呢
4
总4个表
@jizh: 查查这块吧
GoldRT.Tables[3].PrimaryKey = new DataColumn[] { GoldRT.Tables[3].Columns["a"], GoldRT.Tables[3].Columns["b"], GoldRT.Tables[3].Columns["c"], GoldRT.Tables[3].Columns["d"] };
看看那个Columns[...]为null
@Yu:
感谢回复,已经确认这些列无null情况
@jizh: 贴多点码吧
GoldRT.Tables[3].PrimaryKey = new DataColumn[] { GoldRT.Tables[3].Columns["a"], GoldRT.Tables[3].Columns["b"], GoldRT.Tables[3].Columns["c"], GoldRT.Tables[3].Columns["d"] }; //设置主键 当有重复数据时 合并时会自动丢弃??也许是这些字段中有不止一个空值,可以看看~~空值也算重复,而主键是唯一的
感谢回复
已经确认数据没有空或null情况。其实newDataSet.Tables[3]只有一条数据
@jizh: 恩~~这样看真是看不出什么问题,如果不介意的话,可以截取那个出错的项目那个错误部分代码让我调试下?