Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407

Как обработать исключение Duplicate entry(MySql)

19.07.2023, 16:33. Показов 3946. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у меня функция для sql запроса в базу, например такая:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        public static long AddNewDocument(int typeId, string name, string description, string fileName)
        {
            try
            {
                MySqlConnection con = new MySqlConnection(connStr);
                con.Open();
                string sql = @"INSERT INTO document (type_id, name, description, filename) 
                        VALUES (" + typeId + ", '" + name + "', '" + description + "', '" + fileName + "');";
                MySqlCommand command = new MySqlCommand(sql, con);
                command.ExecuteNonQuery();
                con.Close();
                return command.LastInsertedId;
            }
            catch (InvalidCastException e)
            {
                MessageBox.Show(e.Message);
                return -1;
            }
        }
Если name будет совпадать с тем, что в базе, то получаю подобное исключение:
Code
1
Duplicate entry 'исправления  Storage' for key 'name_UNIQUE'
В try-catch не ловится. В основном все ответы на эту тему связаны с тем, что в базу кидаются неправильно подготовленные данные, но в моем случае пользователь сам выбирает этот документ в OpenFileDialog, и это пользователь, может выбрать тот документ который уже есть в базе.
Вопрос в том можно ли как-то обработать это исключение без дополнительного проверочного запроса?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2023, 16:33
Ответы с готовыми решениями:

Как в EF пропускать исключения дубликатов MySqlException: Duplicate entry '1-4' for key 'PRIMARY'
Добрый день. Используется EntityFramework с MySQL. Модель многие ко многим. В одной категории может быть много сайтов, один сайт может...

Duplicate entry mysql вставлять дубликаты
Здравствуйте. Есть таблица id | val | dop 1 | 1 | 1 2 | 1 | 2 3 | 2 | 2 4 | 1 | 1 <- тут будет при вставке ошибка...

MySQL Error! Duplicate entry '1' for key 'user_id_2'
Столкнулся с такой проблемой, если добавить коментарий к одной статьи, а потом к другой то вылазит такая ошибка MySQL error in file:...

69
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
21.07.2023, 11:47  [ТС]
Студворк — интернет-сервис помощи студентам
Andrey-MSK, Я вот так и не понял зачем нужен вариант эксепшена для SQL, если просто Exception вроде как ловит все исключения в приложении?
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
21.07.2023, 11:50
Цитата Сообщение от firnen_dragon Посмотреть сообщение
вариант эксепшена для SQL
У каждого Exception есть свои варианты вывода информации. SqlException может вывести номер ошибки СУБД и её описание из СУБД и там много всего остального, что генерирует сервер СУБД при возникновении ошибки. Просто Exception такое не умеет.
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
21.07.2023, 11:52  [ТС]
Andrey-MSK, Понял, спасибо
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
21.07.2023, 11:52
firnen_dragon, SqlException Класс. У MySqlException наверное тоже самое...
1
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
21.07.2023, 12:18
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Просто Exception такое не умеет.
Всё он умеет. Просто берём, и пихаем в лог его свойство Message, в котором всё это есть. Отдельно знать в лицо конкретное исключение нужно только в случае, когда ты знаешь что с этим делать. А тут же достаточно просто писать в лог или показывать юзеру сообщение, которое содержится в Exception.
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
21.07.2023, 12:22
Цитата Сообщение от Usaga Посмотреть сообщение
и пихаем в лог его свойство Message, в котором всё это есть
А если мне не лог нужен, а MessageBox с подробным описанием что произошло на стороне сервера СУБД. С SqlExсeption я могу всё это оченно красиво оформить, а из Exception я получу просто строку, что будет не очень симпатично, да и в лог можно красиво писать, если использовать особые перехватчики... Ну в общем на вкус и цвет, не зря же их все придумали
0
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
21.07.2023, 12:24
Andrey-MSK, ну так тебе SqlExсeption в глобальный обработчик и прилетит же... Тип исключения не осыпается где-то по пути. Все эти портянки catch(SqlExсeption)...catch(Exception) они все прекрасно могут ужиться в этом глобальном обработчике... Нафига всё это на месте преобразовывать?..
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,765
Записей в блоге: 4
21.07.2023, 12:29
Цитата Сообщение от Usaga Посмотреть сообщение
Нафига всё это на месте преобразовывать?
Да я же не об этом Я про то, что для ошибок SQL лучше использовать специальный обработчик, заточенный именно под них. А в глобальном методе уже определять что прилетело и в соответствии с этим выводить нужное сообщение от нужного перехватчика со всеми его плюшками.
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Но придется писать несколько вариантов Exception (можно наверное через switch попробовать) в методе перехвата, для SQL, Application ну и что там ещё надо.
0
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
21.07.2023, 12:31
Andrey-MSK, а, я не так понял. Да, верно всё.
1
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
22.07.2023, 06:37
Всё хорошо.
Выводите сообщение об ошибке пользователю и он видит, что ошибся он сам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.07.2023, 06:37

Duplicate entry
Пытаюс выполнить запрос в MySQL сервере: INSERT INTO hosts (host, kod) VALUES ('ааааа', 1)Получаю ошибку: Duplicate entry '0' for key 1 ...

SqlExceptionHelper.logExceptions Duplicate entry
Запись создается но в stacktrace много ошибок , соответственно страницы не загружаются. Почему ? DROP SCHEMA IF EXISTS...

Duplicate entry '28' for key 'id_u'
Доброго времени суток! Столкнулся с проблемой, при добавлении вакансий пользователем на сайте. А именно: 1 пользователь не может добавить...

'Duplicate entry '0' for key 'PRIMARY''
Помогите с ошибкой... MySql.Data.MySqlClient.MySqlException: 'Duplicate entry '0' for key 'PRIMARY'' Она вылезает, когда я пытаюсь...

Ошибка Duplicate entry '10' for key 1
Есть скрипт добавление новостей. В файле конфига есть значение newsnum, которое регулирует количество выводимых на главную страницу...


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

Или воспользуйтесь поиском по форуму:
70
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru