0

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

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

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

ВЫБЕРИТЕ IDENT_CURRENT ('TableName') + 1

Новый дети создаются в иерархии, затем я вызываю Update() в том же TableAdapter.

В большинстве случаев это работает отлично, но иногда я получаю ContraintException. Столбец «id» ограничен уникальной проблемой, и это только кажется, когда новые строки добавляются.

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

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

Любые идеи?

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

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

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

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

ответ

0

с помощью SELECT, IDENT_CURRENT («TableName») + 1 будет убивать вас, если у вас есть только один пользователь

+0

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

Смежные вопросы