Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Запись в базу данных

06.07.2021, 08:25. Показов 2525. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите пожалуйста, как сделать проверку на уникальность ? Если есть записи в базе данных и я хочу добавить снова, то как сделать, чтобы не записывались в базу повторно данные ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2021, 08:25
Ответы с готовыми решениями:

Запись данных в базу данных SQL и выгрузка таблицы в форму
Нужно сделать 2 формы, одну с несколькими textBox'ами, чтобы при нажатии кнопки информация введённая в них, записывалась в Базу данных, и...

Запись данных в базу данных mdb с использованием DataAdapter и DataSet
Попробовал сделать Update для таблицы контактов: private void Form1_Load(object sender, EventArgs e) { OleDbConnection...

Запись в базу данных
Создаю Win Form . При запуске приложении открывается вот такая окошка. Как сделать так что бы при изменении данных , данные сохранялись в...

19
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 08:29
ElKros, гуглите "уникальный индекс". И проверку перед вставкой тоже можно сделать.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.07.2021, 09:00
ElKros, для этого в БД придумали первичный ключ (который может быть составным (из нескольких столбцов), к слову).
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 09:01
AndreyVorobey, не всякое поле требующее уникальности есть часть первичного ключа)
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:01  [ТС]
AndreyVorobey, проверка не по первичному ключу будет. Мне нужно сделать проверку по двум полям в одной таблице перед записью новых данных
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 09:05
ElKros, при этом всё равно желательно иметь на этих полях уникальный индекс. Так как иначе может возникнуть ситуация, когда две параллельные транзации выполняют одну проверку, видят отсутствие дубликатов и вставляют эти дубликаты.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:10  [ТС]
Usaga, я нашла вот такие примеры. Что они означают ?
C#
1
2
3
dbContext.Database.ExecuteSqlCommand(string.Format(
                        @"CREATE UNIQUE INDEX LX_{0} ON {0} ({1})", 
                                 "Entitys", "FirstColumn, SecondColumn"));




C#
1
2
3
4
5
[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int FirstColumn { get; set; }
 
[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int SecondColumn { get; set; }
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 09:18
ElKros, они означают, что вам нужно почитать что-нибудь по SQL и выбранной технологии доступа к данным (ADO.NET или ORM).

Я так понимаю, что вы используете EF?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:23  [ТС]
Usaga, да, я использую EF

Добавлено через 1 минуту
Usaga, базу данных я заполнила, осталось только сделать проверку перед добавлением
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 09:26
ElKros, c EF эффективно это сделать не получится. Навешивайте индекс на эти поля.

При вставке, открывайте транзакцию с уровнем изоляции не выше Read Uncommitted, делайте проверку, вставляйте, снова проверяйте. Если дубликаты есть, то откатывайте транзакцию.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:27  [ТС]
Usaga, навесить индекс на поля - это как в этом примере ?
C#
1
2
3
4
5
[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int FirstColumn { get; set; }
 
[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int SecondColumn { get; set; }
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.07.2021, 09:30
Usaga, исходя из природы первичного ключа - эта ситуация все равно невозможна. и две параллельные операции, отправленные на сервак все равно станут в очередь и вторая просто должна вернуться с ошибкой, если у этих двух операций был новый одинаковый первичный ключ.
ElKros, в чем проблема сделать эти поля первичным ключом? вообще, в курсе, что это такое, и какие правила на него наложены?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:31  [ТС]
AndreyVorobey, я не знаю какие правила наложены на первичный ключ
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
06.07.2021, 09:33
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
в чем проблема сделать эти поля первичным ключом?
PK не допускает NULL-значений, UNIQUE - допускает. Поэтому зависит от бизнес-условий

PS
Фактически PK = UNIQUE + NOT NULL
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:35  [ТС]
AndreyVorobey, можно какой-то простой пример для понимания ?
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
06.07.2021, 09:39
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
в чем проблема сделать эти поля первичным ключом?
Не надо делать первичным ключом поля ключом не являющиеся. Для этого есть просто уникальный индекс.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
06.07.2021, 09:43  [ТС]
Usaga, я запуталась..
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.07.2021, 09:57
Grossmeister, трудно лаконично и кратко изложить свой ответ по этому поводу, но, возможно, я не совсем понимаю данную ситуацию.
ElKros, а какой пример тебя интересует?
допустим, есть таблица:
Фамилия Имя Город
если сделать первый и второй столбец в базе как первичный ключ, то как бы ты не хотела, дважды ты не сможешь внести одну и ту же комбинацию фамилии и имени. вопрос в том, где будет проходить проверка - на сервере или в модели. а сервер в любом случае вернет ошибку.

Добавлено через 4 минуты
Usaga, так мы ж не знаем, могут быть эти поля ключом или нет!)

Добавлено через 41 секунду
Ладно. видимо, я лезу не с теми советами в эту историю)
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
06.07.2021, 12:06
ElKros, Можно попробовать FirstOrDefault() с несколькими параметрами.
C#
1
2
3
4
5
6
7
8
9
10
var user = dataContext.Users.FirstOrDefault(
     p => p.User_ID == 250 && p.UserName == "Jack");
if(user == null)
{
   // сохраняем
}
else
{
  // отменяем запрос
}
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
06.07.2021, 16:08
Цитата Сообщение от ElKros Посмотреть сообщение
Usaga, я запуталась..
Очевидно, Вы путаете ключи и индексы.

Ключи, в общем случае, нужны для двух целей: 1) идентификации сущности и 2) связей сущностей между собой
Обе эти задачи вполне покрывает уникальный идентификатор записи (Id), который никак семантически не связан с самой сущностью, но лишь гарантированно уникально ее идентифицирует (определяет)

Индексы используются 1) для ускорения выборок и 2) избежания повтора значений в некоторой колонке (колонках) таблицы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.07.2021, 16:08
Помогаю со студенческими работами здесь

Запись данных в базу
Нужно чтоб значения из техтбокса и комбобокса записывались в базу. С базами Access я никогда не работал, поэтому не все понятно. При...

Запись в базу данных
Имеется база данных пользователей. Таблица Human(ID,FIO, SEX, DateOfBirth, idAdress) Заношу данные в таблицу след. методом: ...

Запись даты в базу данных
Здравствуйте, подскажите пожалуйста как решить проблему... Я работаю с PostgySql. У меня есть на форме DataTimePicker в котором я...

Запись в базу данных access
При попытке выполнения кода выдаёт ошибку "Ошибка синтаксиса в инструкции INSERT INTO" и подсвечивает строку...

Не добавляется запись в базу данных
Почему этот кусок говна кода не работает? Данные приходят, всё нормально. Запрос собирается и выполняется. Но данных в таблице нет. Что не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
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