Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Проблема с автоинкрементальным полем в ADO.NET


Автор: DimaBy 21.3.2007, 09:43
При создании новой записи значение автоинкрементального поля генерирует сам Dataset, затем при обновлении базы методом update значение этого поля обновляется значение, которое генерирует сам Access. При этом зачастую эти значения не совпадают. Можно ли как-то синхронизировать генерацию этого поля. 
Р.S. В таблица реализует многоуровневую структуру и в качестве идентификатора родителя используется ID родительской записи. Можно было бы конечно завести в каждой ячейке целочисленное поле, которому присваивать значение автоинкремента, сгенерированное датасетом, и потом ссылаться на это значение. В принципе от этого уникальность не пострадает, но мне это кажется отнюдь не самым аккуратным вариантом.

Автор: mr.DUDA 21.3.2007, 10:05
DimaBy, эта проблема решается элементарно: в поле нужно установить начальное значение -1 и автоинкремент -1, тогда в датасете поле с автоинкрементом будет расти в другую сторону и никогда не пересечётся со значением из БД.  smile 

Предугадывая закономерный вопрос - отрицательные айдишники работают так же нормально, как и положительные. 

Автор: DimaBy 21.3.2007, 10:25
Не понимаю smile 
Я реализую многоуровневую структуру. 
 - прохожу дерево, добавляю для каждого узла запись, запоминаю её ID, потом для всех потомковустанавливаю поле родителя равным этому ID. Но ID то неправильный!

Автор: mr.DUDA 21.3.2007, 10:42
Цитата(DimaBy @  21.3.2007,  09:25 Найти цитируемый пост)
Я реализую многоуровневую структуру. 

Сорри, я думал вопрос о том как избежать пересечения автоинкремента в БД и новых записях в датасете.

Цитата(DimaBy @  21.3.2007,  09:25 Найти цитируемый пост)
Я реализую многоуровневую структуру.  - прохожу дерево, добавляю для каждого узла запись, запоминаю её ID, потом для всех потомков устанавливаю поле родителя равным этому ID. Но ID то неправильный!

Теоретически, если между таблицами есть DataRelation, в момент сохранения (dataAdapter.Update(dataSet)) все связи между таблицами обновляются автоматически - ID во всех таблицах синхронизируются.

Автор: DimaBy 21.3.2007, 10:58
не обновляются 
1)создаю Row с помощью NewRow
2)добавляю его в Rows
3)делаю (dataAdapter.Update(dataSet))
4)у Row все равно значение датасетовское а не Access'овское

помогает только
Код

dataAdapter.Update(dataSet)
dataAdapter.Fill(dataSet)
row = dataset.rows[dataset.rows.count-1]


но это как-то нерационально

Автор: mr.DUDA 21.3.2007, 14:30
Там как-то надо передать Identity из запроса обратно, через выходной параметр по-моему... Не шарю в этом, надо у других спросить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)