Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вставка данных в ключевой столбец с автоинкрементом / 7 сообщений из 7, страница 1 из 1
03.09.2007, 21:19
    #34772917
Denis Bahiya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
Доброго всем времени суток.

Подскажите пожалуйста, каким образом можно вставить значения в ключевой столбец с установленным autoincrement = true.
Есть таблица в базе Sql Server с ключевым полем установленным в автоинкремент. Есть другие таблицы, которые ссылаются на первую. Проект пишу на C# 2.0. Создал DataSet со всеми таблицами. В процессе работы создаю главную строку для вставки в первую таблицы и несколько строк которые ссылаються на главную. Пока DataSet работает автономно, проблем нет. Проблемы начинаются с обновление БД. Генерируется исключение о невозможности вставки данных в столбец UNIQUE.
Насколько я понял, DataSet сам инкрементирует значение для следующей строки и все строки ссылающиеся на нее привязываются к сгенерированному идентификатору.
...
Рейтинг: 0 / 0
03.09.2007, 21:22
    #34772920
Denis Bahiya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
Нашел следующий выход. В БД отключил автоинкремент, в DataSet оставил. Следовательно строки вставляются в БД без проблем, но возникает следующий вопрос.
А как будет работать подобная схема в многопользовательском режиме?
Думаю с очень большими проблемами. Помогите, пожалуйста, найти выход из этой ситуации.
...
Рейтинг: 0 / 0
04.09.2007, 10:50
    #34773569
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
Выход в принципе стандартный - исключить из инструкции INSERT - ключевой столбец. Он сгенерируется SQL server. А получить его можно (функция после точки с запятой возвращает последний сгенерированный автоинкремент):
Код: plaintext
InsertCommand.CommandText = "Insert Into MyTable(Field1, Field2...) Values (@Field1, @Field2...); SCOPE_IDENTITY()"
...
Рейтинг: 0 / 0
04.09.2007, 21:12
    #34775937
Denis Bahiya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
В принципе так и поступал при вставке одной записи.
Но меня беспокоит другой вопрос.

Есть таблица MainTable, есть таблица ChildTable. ChildTable имеет внешний ключ ссылаюшийся на первичный ключ таблицы MainTable. Первичный ключ в MainTable имеет автоинкремент.
Когда среда VS2005 генерирует SQL код для вставки новых строк, по какому принципу она устанавливает связи между строками?
Т.е.
Код: plaintext
1.
2.
3.
INSERT INTO MainTable (id, str) VALUES ( 100 , "Блабла")
и
INSERT INTO ChildTable (id, idMainTable, caption) VALUES ( 123 ,  100 , "Расширеное описание Блабла")
пока мы работали с формой следующим значением для ключевого столбца в MainTable было 100, тут мы надумали вставить вышеуказанные строки в БД, а как раз перед нами пользователь из другой копии программы добавил новую запись. Т.е. след. значение становиться 101.
Если воспользоваться Вашим советом Витал, не получиться ли следующей ситуации:
строка в MainTable вставляеться с id 101, а строка в ChildTable ссылается на строку с id 100 ?
...
Рейтинг: 0 / 0
04.09.2007, 22:48
    #34776017
Anonymous11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
http://admin.oreillynet.com/catalog/adonetckbk/ 4-я глава. Имеется русский перевод
...
Рейтинг: 0 / 0
05.09.2007, 09:55
    #34776449
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
Если в датасете прописаны внешние ключи и каскадные изменения - то не о чем беспокоиться...
...
Рейтинг: 0 / 0
05.09.2007, 23:54
    #34779517
Denis Bahiya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных в ключевой столбец с автоинкрементом
Если не сложно чуть подробнее про каскадное обновление в DataSet. Есть отличия от SQL Server? И как ведут себя строки при вставке в БД? По какому принципу осуществляется связь между строками? Как реализован механизм привязки к идентификатору который может измениться при вставке в БД?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вставка данных в ключевой столбец с автоинкрементом / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]