Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/41: Рейтинг темы: голосов - 41, средняя оценка - 4.66
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263

Добавление в таблицу с autoincrement

21.02.2010, 21:51. Показов 8138. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеем таблицу, часть полей которых генериться на серваке. Самое простое - поле id с autoincrement. Вот мы открыли справочник, добавили пару записей. Id скорее всего будет выставляться как -1, -2, или вообще никак. Сохраняем значения. В базе все прописалось правильно - новое id будет, например, '12345', но в клиенте, так и остались старое id '-1'. Конечно, если загрузить заново, все будет нормально. Но из-за одной записи не хочется обновлять данные в несколько тысяч строк.

Как бы так сделать, чтобы после добавления/изменения строки, она обновлялась из базы без загрузки остальных данных?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2010, 21:51
Ответы с готовыми решениями:

Добавление в базу с Autoincrement'ным полем
Есть таблица в таблице всего два поля. Поле "Nom" автоинкрементное и поле "Naz" текстовое. Я так понял что добавлять данные в базу нужно...

Добавление данных, заполнение поля со свойством AutoIncrement
Пытаюсь добавить данные в базу данных, которые нахожу в программе, у одного из полей свойство AutoIncrement, как правильно написать запрос,...

Добавление новой записи в таблицу и осуществление запроса на добавление при загрузке формы
Здравствуйте. Есть одна просьба, подскажите как сделать или пример кода покажите на вот такую фишку, при открытии формы для ввода данных в...

9
 Аватар для dimasamchenko
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
22.02.2010, 16:00
У меня была та-же ситуация, так обновление ID происходило просто при перемещении на другую строку DataGreedView, без ручного обновления!
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
22.02.2010, 16:25  [ТС]
Цитата Сообщение от dimasamchenko Посмотреть сообщение
У меня была та-же ситуация, так обновление ID происходило просто при перемещении на другую строку DataGreedView, без ручного обновления!
А можно пример кода?
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
22.02.2010, 16:42
Цитата Сообщение от serg42 Посмотреть сообщение
А можно пример кода?
Как делаете обновление и добавление данных?
1. При добалвении нужно чтобы хранмка возвращала новый ID. Тогда просто в датасет вставляете новую строку
2. при обновлении обновляете датасет.
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
22.02.2010, 17:22  [ТС]
Цитата Сообщение от brugon Посмотреть сообщение
Как делаете обновление и добавление данных?
Стандартными средствами. С помощью DataAdapter, генереных классов и привязки к DataGridView.

Цитата Сообщение от brugon Посмотреть сообщение
1. При добалвении нужно чтобы хранмка возвращала новый ID. Тогда просто в датасет вставляете новую строку
Где это менять? У меня уже в все в датасете, надо только чтобы индекс (или другие поля) после добавления обновлялись.

При сохранении можно весь DataSet передать, адаптер сам разбирает, что обновить, что удалить, что добавить. Этак все придется переписывать вручную. Как это "в лоб" реализовать, я представляю. Но должны быть наверно встроенные методы для этого, задача не такая уж уникальная. Или хотя бы чтоб одну-две функции можно было переопределить..


Цитата Сообщение от brugon Посмотреть сообщение
2. при обновлении обновляете датасет.
В смысле? При обновлении базы?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.02.2010, 20:45
ДАнные обновлять всеравно нужно, если у Вас сетевая БД, т.к. кроме Вас добавлять строки может еще кто-то, тогда методы на клиенте ничего не дадут. Если же используеся локальная БД, то есть 2 способа:
1) Работать со стандартными классами DataSet, в которых создатутся нужные адаптеры. Тогда при работе с DataGridView инкремент работает правильно.
2) Если с первым лень работать, то можно после добавление записи сделать запрос 'select max(ID) from table', фактически вернется ID последней добавленной записи.
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
22.02.2010, 20:58  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
ДАнные обновлять всеравно нужно, если у Вас сетевая БД, т.к. кроме Вас добавлять строки может еще кто-то, тогда методы на клиенте ничего не дадут.
В моём случае это не существенно.

Цитата Сообщение от nio Посмотреть сообщение
1) Работать со стандартными классами DataSet, в которых создатутся нужные адаптеры. Тогда при работе с DataGridView инкремент работает правильно.
Не правильно он работает. Если только задать начало автонумерации из бд. Но кроме сами id, у меня на серваке ещё генерятся коды. В общем желательно именно чтоб после добавления запись в DataSet обновлялась.


Цитата Сообщение от nio Посмотреть сообщение
2) Если с первым лень работать, то можно после добавление записи сделать запрос 'select max(ID) from table', фактически вернется ID последней добавленной записи.
Получить последний id не проблема. Вопрос где всю эту логику прописывать? С максимальным использованием уже готового функционала.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.02.2010, 21:06
Есть у меня такой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
public static bool ChangeTable(DataTable table)
        {
            for (int i = 0; i < table.Rows.Count; i++)
            {
                if (table.Rows[i].RowState != DataRowState.Unchanged)
                {
                    return true;
                }
            }
            return false;
        }
При помощи него я проверяю как изменялись данные в dataset. Попробуй изменить под свои нужды
В этом случае данные верны только до обновления БД. После записи в БД этот метод уже не поможет.
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
23.02.2010, 12:37  [ТС]
Решил проблему. У команд оказывается есть свойство UpdatedRowSource, только чтоб это работало, надо чтобы запрос возвращал данные - переменную или строку. Пробовал дописать
SQL
1
SELECT @id:=id FROM TABLE WHERE id = last_insert_id();
по аналогии с этим, не вышло. Пакетные запросы не хочет выполнять. Через процедуру, наверно, такое получиться провернуть.

Сделал так:

Подключил обработчик на добавление строки
C#
1
TableAdapter.Adapter.RowUpdated += new MySql.Data.MySqlClient.MySqlRowUpdatedEventHandler(Adapter_RowUpdated);
В нем задаю id для текущей строки:
C#
1
2
3
4
5
        void Adapter_RowUpdated(object sender, MySql.Data.MySqlClient.MySqlRowUpdatedEventArgs e)
        {
            if(e.StatementType == StatementType.Insert)
                    e.Row["id"] = e.Command.LastInsertedId;
        }
Усё рабоает

Добавлено через 12 часов 24 минуты
Все оказалось, ещё проще. В настройка TableAdapter нужно поставить галку "Обновлять данные", VS сам генерит пакетный запрос. Только у меня что-то такой номер не прокатывает, опцию ставлю, код не добавляется, а потом опция опять стоит сброшенной
0
2 / 2 / 2
Регистрация: 12.10.2011
Сообщений: 44
03.06.2015, 14:31
Здравствуйте, прошу прощения, что поднимаю тему. Все понял, спасибо за разъяснения, но вот не могу найти вот это
Цитата Сообщение от serg42 Посмотреть сообщение
настройка TableAdapter нужно поставить галку "Обновлять данные"
, в свойствах смотрел, отдельно по классу tableadapter прошелся, не могу найти и всё
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2015, 14:31
Помогаю со студенческими работами здесь

Добавление записей в таблицу и связанную с ней таблицу, с учётом связи
Имеются 3 таблицы: кабинет id_cab n_cab устройства ...

Добавление поля в таблицу через запрос на добавление
Здравствуйте, подскажите как создать запрос, чтобы к таблице добавить еще одно поле. Поля, не записи. Тип запроса Добавление....

Добавление товара и добавление отчета в таблицу
Нужна помощь. Нужно в после обновления, добавить данные в другую базу данных (для отчета) $query = &quot;UPDATE stati SET koll='$koll'...

AutoIncrement
Создаю таблицу(первый столбец AI), добавляю 10 инсертов, нажимаю Apply, потом удаляю эти 10 записей, снова нажимаю Apply. Теперь у меня...

AutoIncrement
Как сделать чтобы в insert одно поле именно заповнялося как AutoIncrement?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru