414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
1 | |
Получение значения ключевого поля после выполнения команды TableAdapter.Insert()01.04.2012, 13:04. Показов 15377. Ответов 32
Метки нет (Все метки)
Использую типизированный датасет в котором заданы DataTable и TableAdapter к ним. Не могу понять как получить значение ключевого поля генерируемого базой после выполнения метода TableAdapter.Insert().
0
|
01.04.2012, 13:04 | |
Ответы с готовыми решениями:
32
Получение значения ключевого поля GridView при событии RowEditing? Почему после выполнения команды cprintf значения строк затираются? Получение ключевого поля только что добавленной записи Получение значения конкретного поля после SQL запроса |
02.04.2012, 16:50 | 21 |
_katon_, Ну так он у тебя и так уже будет к тому времени, в нужной строке в нужной ячейке DataTable. Бери его оттуда и используй.
То что ты пытаешься сделать, очень напоминает изобретение велосипеда, только результатом этого изобретательства, как правило, становятся грабли.
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
02.04.2012, 17:29 [ТС] | 22 |
Не пойму! Вы мне предлагаете отказаться от использования метод Insert() и работать непосредственно с активным DataTable (добавляя записи туда методом Add())?
Insert() по-моему не добавляет данные в datatable (нужен Fill()). А если так, то как даже после использования Fill() получить только, что добавленную строку?
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
03.04.2012, 14:57 | 23 |
_katon_, при использовании способа 1 в вашем выводе вы после обновления данных получите в той таблице, которую обновляли новые значения для столбцов-индендификаторов. сделайте Update для таблицы и посмотрите на нее! все необходимые данные уже есть! остается только вопрос в том, как найти те строки, которые были вставлены, но это уже совсем другой вопрос.
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
03.04.2012, 16:52 [ТС] | 24 |
Это и есть сама проблема! Мне нужен ID, а как выбрать строку только, что вставленную от остальных и гарантировать что это именно та строка я не знаю.
0
|
03.04.2012, 17:05 | 25 |
_katon_, ты что-то мутное делаешь и уже сам походу во всем этом запутался. Метод Update адаптера берет таблицу, с которой связан, и проводит операции сохранения, обновления или удаления применительно к строкам в зависимости от того, какие манипуляции производились с ними до этого. И уж точно твой адаптер знать не должен (и не будет), какую строку ты и когда вставил. За этим должен следить именно ты, и после Update для нужной строки должен взять полученный ID из той строки, которую ты знаешь.
Вся твоя проблема на данный момент заключается в ошибочном подходе к обработке данных. Сядь, спроектируй нормально (можно на обычном листе бумаги диаграммку набросать), а затем уже реализуй кодом.
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
03.04.2012, 19:49 [ТС] | 26 |
Я не согласен с вами, nio!
Изначально тема звучала так: Получение значения ключевого поля после выполнения команды TableAdapter.Insert(). В теме я спрашивал как с помощью этого метода вернуть ID созданной записи, поскольку поле ID генерируется базой и клиентское приложение (и адаптер в том числе) без понятия, какое значение будет присвоено полю ID. И все! В любом случае предлагаю прекратить дискуссию, так как пользы уже в ней не вижу!
0
|
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
|
|
03.04.2012, 22:17 | 27 |
Адаптер работает с таблицей, так? Ну так я и говорю, что поле id в таблице (DataTable) обновляется автоматом, не надо ничего возвращать и вручную писать.
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
03.04.2012, 22:59 [ТС] | 28 |
У меня есть одна большая инструкция в которой организована определенная последовательность вставок записей в разные таблицы БД. Никакого интерфейса нет!!! Пользователь на время выполнения инструкции предоставляется прогресбар в котором отображается ход внесения данных в БД. Выполнилась вставка блока данных - полоска пододвинулась.
Все вносимые данные связаны между собой и поэтому создание всех последующих записей (в других таблицах) возможно только после определения значения первичного ключа только, что вставленной записи (для подстановки в поле вторичного ключа). Кроме того - это не просто последовательность вставок, а сложный алгоритм осуществляющий проверку, после каждого шага, условий с целью определения последовательности вставки. Пример Чтобы создать заказ нужно знать ID заявки, вставка которой была осуществлена ранее. Я ДОЛЖЕН использовать значения PK созданных записей чтобы создавать полностью валидные записи в других таблицах используя их в качестве FK. По сути при таком подходе я абстрагируюсь от датасета потому, что именно этот участок безнесс-логики не требует модели с отключением. Вот именно поэтому я использую метод Insert() чтобы просто вставит данны в таблицу на сервере (если посмотреть внутрь - он тупо выполняет запрос на вставку).
0
|
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
|
|
04.04.2012, 12:57 | 29 |
Вполне тривиальная задача. Я тоже самое постоянно делаю. Так вот, id обновляется сам, если делать так, как я писал выше. Если в датасете настроена связь между таблицами, то id в дочерней таблице обновится автоматом.
Думаю, не совсем правильно использовать для этих целей сгенерированный адаптер, да ещё и править его код. А так, дело хозяйское, я как бы не настаиваю
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
04.04.2012, 13:30 [ТС] | 30 |
Меня заинтересовала эта фраза. Но мне не совсем понятно, что вы имеете ввиду! Можно кусок кода в котором реализуется последовательность вставок?
Кстати я отказался от правки автоматически генерируемого кода. А вот по поводу использования... Я пользуюсь потому, что не хочу выдумывать велосипед. Согласитесь если есть выбор между: писать свой запрос на вставку ил воспользоваться существующим, то логично склонится к последнему.
0
|
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
|
||||||
04.04.2012, 22:06 | 31 | |||||
Для другой БД будет немного отличаться, но суть та же.
0
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
|
|
04.04.2012, 22:28 [ТС] | 32 |
Вот теперь я понял о чем вы мне толкуете. Спасибо большое! Иногда мне кажется, что я лучше понимаю код))))
0
|
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
|
||||||
20.02.2014, 20:04 | 33 | |||||
а то что оно выводит предупреждение "Не выполнен синтаксический разбор запроса" это нормально?? или я что то нетак делаю?
0
|
20.02.2014, 20:04 | |
20.02.2014, 20:04 | |
Помогаю со студенческими работами здесь
33
После выполнения определённой команды не выполняются последующие команды Изменение значения ключевого поля таблицы Определение значения ключевого поля, неотображаемого в dataGridView, по выбранной строке Сортировка элементов в линейном однонаправленном списке по возрастанию значения ключевого поля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |