|
|
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени суток. Подскажите пожалуйста, каким образом можно вставить значения в ключевой столбец с установленным autoincrement = true. Есть таблица в базе Sql Server с ключевым полем установленным в автоинкремент. Есть другие таблицы, которые ссылаются на первую. Проект пишу на C# 2.0. Создал DataSet со всеми таблицами. В процессе работы создаю главную строку для вставки в первую таблицы и несколько строк которые ссылаються на главную. Пока DataSet работает автономно, проблем нет. Проблемы начинаются с обновление БД. Генерируется исключение о невозможности вставки данных в столбец UNIQUE. Насколько я понял, DataSet сам инкрементирует значение для следующей строки и все строки ссылающиеся на нее привязываются к сгенерированному идентификатору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 21:19 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
Нашел следующий выход. В БД отключил автоинкремент, в DataSet оставил. Следовательно строки вставляются в БД без проблем, но возникает следующий вопрос. А как будет работать подобная схема в многопользовательском режиме? Думаю с очень большими проблемами. Помогите, пожалуйста, найти выход из этой ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 21:22 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
Выход в принципе стандартный - исключить из инструкции INSERT - ключевой столбец. Он сгенерируется SQL server. А получить его можно (функция после точки с запятой возвращает последний сгенерированный автоинкремент): Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 10:50 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
В принципе так и поступал при вставке одной записи. Но меня беспокоит другой вопрос. Есть таблица MainTable, есть таблица ChildTable. ChildTable имеет внешний ключ ссылаюшийся на первичный ключ таблицы MainTable. Первичный ключ в MainTable имеет автоинкремент. Когда среда VS2005 генерирует SQL код для вставки новых строк, по какому принципу она устанавливает связи между строками? Т.е. Код: plaintext 1. 2. 3. Если воспользоваться Вашим советом Витал, не получиться ли следующей ситуации: строка в MainTable вставляеться с id 101, а строка в ChildTable ссылается на строку с id 100 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 21:12 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
http://admin.oreillynet.com/catalog/adonetckbk/ 4-я глава. Имеется русский перевод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 22:48 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
Если в датасете прописаны внешние ключи и каскадные изменения - то не о чем беспокоиться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 09:55 |
|
||
|
Вставка данных в ключевой столбец с автоинкрементом
|
|||
|---|---|---|---|
|
#18+
Если не сложно чуть подробнее про каскадное обновление в DataSet. Есть отличия от SQL Server? И как ведут себя строки при вставке в БД? По какому принципу осуществляется связь между строками? Как реализован механизм привязки к идентификатору который может измениться при вставке в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 23:54 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=34776449&tid=1352637]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 307ms |

| 0 / 0 |
