木子冬
程序就是规范流程下的替代品,互联网就是对应需求下的一个产业链!

导航

 

异常详细信息: 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);

    //数据操作
}

感谢:http://blog.csdn.net/cui55/article/details/1371535

posted on 2014-11-28 15:47  木子_冬  阅读(2466)  评论(0编辑  收藏  举报