Типизированный набор данных ConstraintException при вставке - PullRequest
0 голосов
/ 17 августа 2010

В основном у меня есть таблица, которая содержит иерархические данные.

Итак, у меня есть столбец идентификатора и сводный столбец, который указывает на столбец идентификатора для родительского элемента каждого дочернего элемента.

Эта таблицазагружается из базы данных с помощью GetData () в TableAdapter, а затем автоинкрементное значение первичного ключа таблицы устанавливается с помощью:

SELECT IDENT_CURRENT ('TableName') + 1

Новые дочерние элементысоздаются в иерархии, затем я вызываю Update () для того же TableAdapter.

Большую часть времени это работает отлично, но иногда я получаю, что столбец ContraintException 'id' ограничен, чтобы быть уникальной проблемой, и этоКажется, что это происходит только при добавлении новых строк.

Обычно, я бы просто установил autoincrementseed и autoincrementstep на -1, и после обновления столбец id получал бы правильные значения из базы данных, но поскольку столбец свертки зависитдля значений первичного ключа это не сработает.

Я не могу применить каждую новую строку в прямом эфире, потому что всеl изменения в целом должны быть проверены пользователем, прежде чем они будут применены к базе данных.

Любые идеи?

РЕДАКТИРОВАТЬ: я должен упомянуть, что другие изменения не вносятся в эту таблицуиз любого другого источника, поэтому здесь нет проблем с параллелизмом.

ДРУГОЕ РЕДАКТИРОВАНИЕ: Сегодня я проверил значения в таблице перед вызовом метода обновления и заметил, что проблема связана с неправильной обработкой новых строкотсортировано по первичному ключу.

Так, например, пошли строки, 960 961 963 962, и когда был вставлен 962, я получил ошибку, что 962 уже существует.Если бы обновление вставило строки, чтобы этого не случилось.

Почему таблица индексирует строки не по порядку первичного ключа?

1 Ответ

0 голосов
/ 17 августа 2010

использование SELECT IDENT_CURRENT ('TableName') + 1 убьет вас, если у вас нет только одного пользователя

...