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

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

19.07.2023, 16:33. Показов 3752. Ответов 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
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 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
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 4
21.07.2023, 11:52
firnen_dragon, SqlException Класс. У MySqlException наверное тоже самое...
1
Эксперт .NET
 Аватар для Usaga
14367 / 9468 / 1360
Регистрация: 21.01.2016
Сообщений: 35,719
21.07.2023, 12:18
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Просто Exception такое не умеет.
Всё он умеет. Просто берём, и пихаем в лог его свойство Message, в котором всё это есть. Отдельно знать в лицо конкретное исключение нужно только в случае, когда ты знаешь что с этим делать. А тут же достаточно просто писать в лог или показывать юзеру сообщение, которое содержится в Exception.
0
 Аватар для Andrey-MSK
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 4
21.07.2023, 12:22
Цитата Сообщение от Usaga Посмотреть сообщение
и пихаем в лог его свойство Message, в котором всё это есть
А если мне не лог нужен, а MessageBox с подробным описанием что произошло на стороне сервера СУБД. С SqlExсeption я могу всё это оченно красиво оформить, а из Exception я получу просто строку, что будет не очень симпатично, да и в лог можно красиво писать, если использовать особые перехватчики... Ну в общем на вкус и цвет, не зря же их все придумали
0
Эксперт .NET
 Аватар для Usaga
14367 / 9468 / 1360
Регистрация: 21.01.2016
Сообщений: 35,719
21.07.2023, 12:24
Andrey-MSK, ну так тебе SqlExсeption в глобальный обработчик и прилетит же... Тип исключения не осыпается где-то по пути. Все эти портянки catch(SqlExсeption)...catch(Exception) они все прекрасно могут ужиться в этом глобальном обработчике... Нафига всё это на месте преобразовывать?..
0
 Аватар для Andrey-MSK
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 4
21.07.2023, 12:29
Цитата Сообщение от Usaga Посмотреть сообщение
Нафига всё это на месте преобразовывать?
Да я же не об этом Я про то, что для ошибок SQL лучше использовать специальный обработчик, заточенный именно под них. А в глобальном методе уже определять что прилетело и в соответствии с этим выводить нужное сообщение от нужного перехватчика со всеми его плюшками.
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Но придется писать несколько вариантов Exception (можно наверное через switch попробовать) в методе перехвата, для SQL, Application ну и что там ещё надо.
0
Эксперт .NET
 Аватар для Usaga
14367 / 9468 / 1360
Регистрация: 21.01.2016
Сообщений: 35,719
21.07.2023, 12:31
Andrey-MSK, а, я не так понял. Да, верно всё.
1
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru