Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дабавление данных в DataSet.Table(0) 
:(
    Опции темы
heskey
Дата 2.12.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



Есть отсоединенный DataSet с 2 связанными таблицами. Как при добавление новой строки в главную таблицу, получить ID новой записи, для добавления этого значения в поле ForeignKey подчиненной таблицы. Спасибо за помощь.
PM MAIL   Вверх
thomas
Дата 2.12.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



heskey
Приветствую.
Если в базе данных поле ID для этой таблицы не автонумерованное и используется свой алгоритм нумерации для чисел или это string то перед добавлением новой строки в таблицу ДС сам присвой ID(программно или "ручками") и передай его в дочернюю таблицу. Когда закончишь все манипуляции с ДС, выполняешь обновление таблиц БД новыми данными из таблиц ДатаСет.
Если же у тебя для этого поля автонумерация, то надо выполнить команду INSERT в БД и после этого обновить таблицу ДС(получить из БД эту последнюю строку с ID). В случае с SQL сервером можно использовать хранимую процедуру на строне сервера для добавления строк в таблицу, которая возвратит в качестве параметра только что присвоенный ID.

Во всяком случае, я так делаю.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
heskey
Дата 3.12.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



Да, у меня второй вариант, ID с автонумерацией. Конечно варианты с INSERT и StoredProcedure понятны. Но это получается, что все равно нужно делать более 1 обращения к базе? Тогда уже можно использовать и DataTable, обновляя таблицы последовательно.
1 Update сделать все таки не получится?
PM MAIL   Вверх
thomas
Дата 3.12.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



heskey
Цитата

1 Update сделать все таки не получится? 

Если имеется в виду сделать записи в родительской таблицу и соответствующие им в дочерней, а потом "одним скопом" обновить БД, то скорее всего это не получиться.
При много пользовательском прилрожении даже если каждый пользователь продолжит автонумерацию ID у себя в ДС с последнего загруженного ID, то когда они (пользователи) будут обновлять БД произойдет конфликт с нумерацией ID. Могут быть одинаковые ID. А это приведет к искажению и утере данных. Запись новой строки в родительскую таблицу желательно проводить сразу, а вот заполнять ее дочерние записи можно и в отсоединенном от БД состоянии.
Я сейчас решаю в принципе похожую задачу.
Надо занести данные, содержащие фактуру, в БД. Документ описывают две таблицы: фактура(шапка - номер, дата, от кого, кому) и детали фактуры(что, сколько и по какой цене).
В приложении на форме отображаются: шапка фактуры детально (label + textbox), остальное в DataGridView. Заполнив шапку фактуры, я знаю все кроме её номера. Я конечно могу заполнить грид товарами, но я не могу указать номер фактуры, к которой они относятся. Потому как я знаю номер фактуры который был в БД час или два назад, когда я заполнил ДатаСет. Но что сделали другие пользователи программы за это время. Может они добавили свои фактуры в БД. Значит, если я тупо присвою следующий номер за тем что я имею и кто-то другой уже занял этот номер, то что произойдет когда я буду обновлять БД из моего ДатаСет? В таблицу фактура попадут данные из шапки фактуры которую я набирал, а вот что будет с дочерними записями. Произойдет искажение.
Вот такая Се Ля Ви.
Возможно есть решения, но я их пока не знаю. А делаю так как подсказывает мне логика. И такая метода работает.  


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
heskey
Дата 3.12.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



Да, безусловно пока я мучаю ДатаСет отсоединенно, другие пользователи сто раз надобавляют данных в базу на сервере..видимо действительно "одним скопом" тут не выйдет.
  В одном месте читал, что можно искуственно выставлять значения, например -1, вроде ДатаСет разберется сам, но вот что-то тоже вторичный ключ он не пишет. Жаль..думал ДатаСет поумнее будет smile может как-нибудь считывает текущее значение счетчика в таблице на момент Апдейта.
  В любом случае, Thomas, спасибо за консультацию, буду следовать твоему совету.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.