Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 04.01.2019
Сообщений: 59

Автоматическое заполнение первичного ключа

03.01.2020, 18:44. Показов 4346. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь через форму добавить в таблицу из БД данные.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button3_Click(object sender, EventArgs e)
        {
                DataRow myRow = reklDataSet.Tables["Клиенты"].NewRow();
                myRow["KNUM"] = 0;
                myRow["KFAM"] = KlientName.Text;
                myRow["KNAM"] = KlientFam.Text;
                myRow["KOTCH"] = KlientOtch.Text;
                myRow["KADRES"] = KlientAdr.Text;
                myRow["KTEL"] = KlientTel.Text;
                reklDataSet.Клиенты.Rows.Add(myRow);
                this.клиентыTableAdapter.Update(this.reklDataSet.Клиенты);
                this.клиентыTableAdapter.Fill(this.reklDataSet.Клиенты);
 
        }
Данные добавляет, все хорошо, НО

Как сделать, чтобы при в первичном ключе ( KNUM ) при добавлении он автоматически ставил +1, чтобы не было ошибок о том, что данные повторяются..
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2020, 18:44
Ответы с готовыми решениями:

Получение первичного ключа
Не могу найти решения следующего вопроса. У меня имеется таблица, где id является инкрементом и первичным ключом. В следующей строке: ...

Извлечение первичного ключа
Уважаемы форумчане! Подскажите пожалуйста, как извлечь первичный ключ одной таблицы чтобы его потом сохранить в другой. Есть две...

Изменение значения первичного ключа
В таблице БД есть первичный ключ ProductID, который вручную не изменяется, при добавлении данных через Query запрос (INSERT), у меня отсчет...

8
0 / 0 / 0
Регистрация: 04.01.2019
Сообщений: 59
03.01.2020, 21:46  [ТС]
+ вопрос.





Мне нужно, чтобы происходило так: Выбираем в комбобокс KFAM ( наименование ) , а в таблицу в БД заносило KNUM ( номер, он же первичный ключ)

C#
1
2
3
4
5
6
7
8
9
10
11
12
DataRow myRow = reklDataSet.Tables["Заказы"].NewRow();
                myRow = reklDataSet.Tables["Заказы"].NewRow();
                myRow["ZNUM"] = 2;
                myRow["ZDATA"] = dateTimePicker1.Value.ToShortDateString();
                myRow["KNUM"] = comboBox2.Text;
                myRow["SNUM"] = comboBox1.Text;
                myRow["UNUM"] = comboBoxNaimUsl.Text;
                myRow["ZKOL"] = textBoxKol.Text;
                myRow["ZSTAT"] = textBox1.Text;
                reklDataSet.Заказы.Rows.Add(myRow);
                this.заказыTableAdapter.Update(this.reklDataSet.Заказы);
                this.заказыTableAdapter.Fill(this.reklDataSet.Заказы);
0
0 / 0 / 0
Регистрация: 04.01.2019
Сообщений: 59
03.01.2020, 23:03  [ТС]
По 2 вопросу, как я понимаю, дело в запросе.
Но не знаю, что именно там не так
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,360
04.01.2020, 08:33
Цитата Сообщение от ookullme Посмотреть сообщение
Как сделать, чтобы при в первичном ключе ( KNUM ) при добавлении он автоматически ставил +1, чтобы не было ошибок о том, что данные повторяются..
Это делается на уровне СУБД навешиванием специальной настройки на первичный ключ. Что это за настройка зависит от используемой вами СУБД. По коду этого не понять.

Я вам настоятельно рекомендую не использовать DataTable'ы и TableAdapter'ы. Это очень древнючий способ, который всё ещё имеет смысл использовать только в крайне редких ситуациях, когда схема базы не очень известна.

Значительно удобнее и яснее, когда вы для каждой своей выборки из базы заводите нормальный класс и манипулируете такими классами или их коллекциями. Тогда не будет этого страшного кода со строковой типизацией:

C#
1
2
3
4
5
6
7
8
                myRow = reklDataSet.Tables["Заказы"].NewRow();
                myRow["ZNUM"] = 2;
                myRow["ZDATA"] = dateTimePicker1.Value.ToShortDateString();
                myRow["KNUM"] = comboBox2.Text;
                myRow["SNUM"] = comboBox1.Text;
                myRow["UNUM"] = comboBoxNaimUsl.Text;
                myRow["ZKOL"] = textBoxKol.Text;
                myRow["ZSTAT"] = textBox1.Text;
Погуглите примеры работы с Linq2Db или Entity Framework Core и сравните с ерундой выше.
1
0 / 0 / 0
Регистрация: 04.01.2019
Сообщений: 59
04.01.2020, 15:03  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это делается на уровне СУБД навешиванием специальной настройки на первичный ключ. Что это за настройка зависит от используемой вами СУБД. По коду этого не понять.
Вы про автоинкремент?

Но ведь тогда при удалении какой-либо записи, ключ не перезаписывается
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
05.01.2020, 00:13
Цитата Сообщение от ookullme Посмотреть сообщение
Но ведь тогда при удалении какой-либо записи, ключ не перезаписывается
Да, так устроены базы данных и их целостность.
1. всегда должен быть уникальный идентификатор каждой записи (первичный ключ), например, 1, 2, 3, 4, 5 и т.д.
Для удобства использования делается Автоинкримент, чтобы БД сама находила последний номер и добавляла +1 к нему для новой записи.
2. если удалили запись с первичным ключом, например, 3, то база уже никогда не будет использовать это число для создания новой записи, т.е. у вас есть 4 записи
1. что-то
2. что-то
3. что-то
4. что-то

теперь вы удалили запись с ключом 3. В базе осталось 1,2,4.
Добавляете в БД новую запись в БД добавится строка с ключом 5. Про 3 уже навсегда забыли. Так правильно для целостности данных в любой базе данных.
1
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,360
05.01.2020, 08:27
Лучший ответ Сообщение было отмечено ookullme как решение

Решение

Цитата Сообщение от ookullme Посмотреть сообщение
Вы про автоинкремент?
Да.

Цитата Сообщение от ookullme Посмотреть сообщение
Но ведь тогда при удалении какой-либо записи, ключ не перезаписывается
А он и не должен. Первичный ключ - уникальный (в рамках таблицы) идентификатор записи, а не счётчик количества записей.

Цитата Сообщение от Pavel55 Посмотреть сообщение
Про 3 уже навсегда забыли. Так правильно для целостности данных в любой базе данных.
Автоинкремент можно и выключить перед вставкой, поэтому не навсегда. И к целостности данных это отношения не имеет.
1
0 / 0 / 0
Регистрация: 04.01.2019
Сообщений: 59
05.01.2020, 13:35  [ТС]
Спасибо.

А что насчёт второго вопроса?

Добавлено через 9 минут
Который во 2 посте
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,360
05.01.2020, 13:45
ookullme, второй вопрос вытекает из кривой работы с DataTable. Переведите свой код на Linq2Db или EF.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2020, 13:45
Помогаю со студенческими работами здесь

Автоинкремент первичного ключа не работает
commandText = "INSERT INTO Users (Login_User, Password_User, " + "Mail_User, Date_Register, Date_Login,...

Добавить строку в БД без первичного ключа
Есть таблица с двумя столбцами: - id - первичный ключ - value - значение int Я пытаюсь добавить данные следующим образом: ...

Входит ли колонка в состав первичного ключа
Доброго времени суток всем! Бьюсь над, казалось бы, простой задачей уже третий день. Глухо. Имеем БД, добавленную в Visual Studio в...

EF и Ошибка при изменении первичного ключа
Использу EF Code first. Есть сущность с составным ключом. В ключе 3 поля, и ни одно нельзя изменить. вылетает эксепшн : Произошло...

Получение Первичного ключа внесенной записи
Здраствуйте!! Подскажите пожалуйста как вернуть первичный ключ внесенной записи! Я использую OleDataAdapter.InsertCommand с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru