异常详细信息: System.InvalidOperationException: DataTable 内部索引已损坏:“5”。
[InvalidOperationException: DataTable 内部索引已损坏:“5”。]
System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 position) +431
System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 position) +846
System.Data.RBTree`1.Insert(K item) +24
System.Data.Index.InitRecords(IFilter filter) +1691978
System.Data.Index..ctor(DataTable table, Int32[] ndexDesc, IndexField[] indexFields, DataViewRowState recordStates, IFilter rowFilter) +175
System.Data.Select.CreateIndex() +1199
System.Data.Select.SelectRows() +267
System.Data.DataTable.Select(String filterExpression) +65
MsgService.MyServer.checkUserExist(String UserID, String Domain) +167
MsgService.Migrated_Ref.addUser() +132
MsgService.Migrated_Ref.Page_Load(Object sender, EventArgs e) +292
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
解决的办法其实很简单,只要了解出错原因。
一般我们会使用DataTable.Select()方法来筛选数据,而DataTable会在执行Select()方法的时候系统会默认创建一个DataView,而DataView创建的时候会创建内部索引,如果这个时候数据被操作(添加,删除),那么内部索引就会被破坏
新建一个DataView,并在创建DataView的时候锁定DataTable。
DataView myDV;
lock(myTable)
{
myDV=new DataView(myTable,"过滤","排序",DataViewRowState.CurrentRows);
//数据操作
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步