![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
heskey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 3.12.2004 Репутация: нет Всего: нет |
Есть отсоединенный DataSet с 2 связанными таблицами. Как при добавление новой строки в главную таблицу, получить ID новой записи, для добавления этого значения в поле ForeignKey подчиненной таблицы. Спасибо за помощь.
|
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
heskey,
Приветствую. Если в базе данных поле ID для этой таблицы не автонумерованное и используется свой алгоритм нумерации для чисел или это string то перед добавлением новой строки в таблицу ДС сам присвой ID(программно или "ручками") и передай его в дочернюю таблицу. Когда закончишь все манипуляции с ДС, выполняешь обновление таблиц БД новыми данными из таблиц ДатаСет. Если же у тебя для этого поля автонумерация, то надо выполнить команду INSERT в БД и после этого обновить таблицу ДС(получить из БД эту последнюю строку с ID). В случае с SQL сервером можно использовать хранимую процедуру на строне сервера для добавления строк в таблицу, которая возвратит в качестве параметра только что присвоенный ID. Во всяком случае, я так делаю. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
heskey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 3.12.2004 Репутация: нет Всего: нет |
Да, у меня второй вариант, ID с автонумерацией. Конечно варианты с INSERT и StoredProcedure понятны. Но это получается, что все равно нужно делать более 1 обращения к базе? Тогда уже можно использовать и DataTable, обновляя таблицы последовательно.
1 Update сделать все таки не получится? |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
heskey,
Если имеется в виду сделать записи в родительской таблицу и соответствующие им в дочерней, а потом "одним скопом" обновить БД, то скорее всего это не получиться. При много пользовательском прилрожении даже если каждый пользователь продолжит автонумерацию ID у себя в ДС с последнего загруженного ID, то когда они (пользователи) будут обновлять БД произойдет конфликт с нумерацией ID. Могут быть одинаковые ID. А это приведет к искажению и утере данных. Запись новой строки в родительскую таблицу желательно проводить сразу, а вот заполнять ее дочерние записи можно и в отсоединенном от БД состоянии. Я сейчас решаю в принципе похожую задачу. Надо занести данные, содержащие фактуру, в БД. Документ описывают две таблицы: фактура(шапка - номер, дата, от кого, кому) и детали фактуры(что, сколько и по какой цене). В приложении на форме отображаются: шапка фактуры детально (label + textbox), остальное в DataGridView. Заполнив шапку фактуры, я знаю все кроме её номера. Я конечно могу заполнить грид товарами, но я не могу указать номер фактуры, к которой они относятся. Потому как я знаю номер фактуры который был в БД час или два назад, когда я заполнил ДатаСет. Но что сделали другие пользователи программы за это время. Может они добавили свои фактуры в БД. Значит, если я тупо присвою следующий номер за тем что я имею и кто-то другой уже занял этот номер, то что произойдет когда я буду обновлять БД из моего ДатаСет? В таблицу фактура попадут данные из шапки фактуры которую я набирал, а вот что будет с дочерними записями. Произойдет искажение. Вот такая Се Ля Ви. Возможно есть решения, но я их пока не знаю. А делаю так как подсказывает мне логика. И такая метода работает. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
heskey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 3.12.2004 Репутация: нет Всего: нет |
Да, безусловно пока я мучаю ДатаСет отсоединенно, другие пользователи сто раз надобавляют данных в базу на сервере..видимо действительно "одним скопом" тут не выйдет.
В одном месте читал, что можно искуственно выставлять значения, например -1, вроде ДатаСет разберется сам, но вот что-то тоже вторичный ключ он не пишет. Жаль..думал ДатаСет поумнее будет ![]() В любом случае, Thomas, спасибо за консультацию, буду следовать твоему совету. |
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |