none
Что могло стать причиной ошибки “DataTable index is corrupted" RRS feed

  • Общие обсуждения

  • Вот четыре причины, вследствие которых могла произойти ошибка “ DataTable index is corrupted ".

    1) Изменение значений во время события DataView.ListChanged. Это не поддерживается.

    Посмотрите стек вызовов и если там есть событие DataView.OnListChanged, а вы изменяете данные DataRow / Set / Table то, скорее всего, произойдет повреждение индекса.

    Краткое описание проблемы: внутренние индексы получают уведомления об изменении вне порядка.

    Обходной путь - использовать событие DataTable.RowChanged вместо DataView.ListChanged.

    2) Существует еще неисправленная ошибка при объединении данных в существующих DataRow , которые начинаются в Added или Deleted и заканчиваются в Modified RowState .

       DataAdapter.Fill, DataSet.Load, DataTable.Load когда LoadOption.PreserveChanges

       DataSet.Merge, DataTable.Merge удаленных строк

       DataSet . Merge ( DataRow []) для добавленных строк

    Краткое описание проблемы: DataTable говорит DataView "добавить" вместо "изменить", что приводит к повреждению индекса.

    3) Многопоточность

    DataSet / DataTable и любые связанные объекты не являются потокобезопасными. Убедитесь, что вы работаете со всеми соответствующими объектами потокобезопасно.

    4) Когда значение DataColumn.DataType является ссылочным типом, и оно изменяется вместо того, чтобы рассматриваться, как только для чтения.

    Пример: DataColumn.DataType является byte [] и столбец отсортирован. Если значения в массиве меняются вместо присваивания Data Row нового массива, то внутренний индекс не знает об этом изменении и становится поврежденным.

    3 ноября 2010 г. 12:17