|
0 / 0 / 0
Регистрация: 01.04.2024
Сообщений: 10
|
|||||||||||
Остановка выполнения кода в после срабатывания ошибки во внешнем классе16.04.2024, 16:04. Показов 1245. Ответов 12
Есть приложение, в котором производится работа с БД при помощи библиотеки Npgsql. Для выполнения запросов, не получающих никакие данные, а лишь выполняющие запросы INSERT, DELETE и т.д. был создан метод Query(string query) в отдельном статическом публичном классе Data для использования его во всевозможных формах. Для отлова неправильного запроса/данных в запросе я как обычно пользовался дебагом самого вижака, но решил попробовать обрабатывать ошибку на моменте ExecuteNonQuery() для получения итогового запроса, который будет отправляться в бд. Так как все запросы будут идти через Query(string query) и после этого string query будет попадать в класс Data и в нём будет выполняться cmd.ExecuteNonQuery(), а cmd - это в свою очередь тот самый string query, то я обрабатываю cmd.ExecuteNonQuery() в try catch и с помощью MessageBox хочу выводить итоговый запрос, который отправляется в бд, и если он выполнился с ошибкой, посмотреть, какие данные в итоге получились в самом запросе (например в запросе увидел айдишник 7, которого нет в таблице, на которую ссылаюсь и т.д.).
Проблема в том, что после вывода ошибочного запроса в mbox, выполнение кода в классе, где выполнялся метод Data.Query(), продолжается, хотя я хочу сделать так, что после получения провального запроса я вижу, какой запрос отправился в бд, после чего выполнение кода останавливается. Блок кода 1 - метод, в котором специально выполняется запрос с ошибкой, т.к. id=5 не существует во внешней таблице. Блок кода 2 - обработка выполнения запроса с ошибкой, mbox выводит мне запрос, который отправлялся в бд, после чего я бы смог исправлять ошибку в каждом вызывающем методе с ошибкой. Блок кода 1 (класс AddAssignment)
0
|
|||||||||||
| 16.04.2024, 16:04 | |
|
Ответы с готовыми решениями:
12
Остановка и возобновление выполнения кода Остановка выполнения кода программы на N сек.
|
| 16.04.2024, 16:18 | |
|
Отдебажить всё не получится априори, т.к. БД будет постоянно меняться, код рефакториться и т.п. Поэтому чаще применяют не mbox, а какой нибудь логгер.
Если Вам надо остановить/приостановить работу при возникновении ошибки, то: вариант 1 - оберните в try catch не код в методе Query, а во внешнем по отношению к нему. вариант 2 - создайте событие в методе Query, которое обрабатывайте во внешнем коде.
0
|
|
|
0 / 0 / 0
Регистрация: 01.04.2024
Сообщений: 10
|
|
| 16.04.2024, 16:30 [ТС] | |
|
Мне нужно отдебажить лишь итоговый запрос, который будет отправляться в бд, то есть например увидеть, что в бд отправилось по итогу выполнения метода INSERT INTO orders(code, name, guarantor_id) VALUES ('121.121.121', 'Тестовый приказ', 5);
Если оборачивать во внешнем, то это нужно будет каждый Query оборачивать, и при этом я не смогу передавать в mbox тот string query, который я задавал в Data.Query(). Для этого придётся постоянно создавать переменную, а если обернуть в классе Data cmd.ExecuteNonQuery(), то все Query() будут проходить через него и смогут выводить запрос, но код продолжает выполняться
0
|
|
|
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
|
|||||||||||||
| 17.04.2024, 12:01 | |||||||||||||
0
|
|||||||||||||
|
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
|
|
| 17.04.2024, 12:35 | |
|
Не увидел где там ТСу неудобно.
Перехватывать исключения можно и глобально, необязательно в Блоке 1 и не нужно каждый Query оборачивать try catch. string query получено. Код дальше не выполняется. Метод Query выполняет свою задачу а не анализирует исключение.
0
|
|
| 17.04.2024, 13:08 | |||||||||||
|
Вариант с событием.
Класс Data
Где-то во внешнем коде
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 01.04.2024
Сообщений: 10
|
|||
| 19.04.2024, 08:37 [ТС] | |||
|
0
|
|||
|
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
|
||||||||||||
| 19.04.2024, 09:03 | ||||||||||||
Сообщение было отмечено Klaudis как решение
Решение
Можно возвращать true false из Query или коды ошибок
И не стоит игнорировать исключение .
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 01.04.2024
Сообщений: 10
|
|
| 19.04.2024, 09:05 [ТС] | |
|
Точно, вариант оказался довольно простым в исполнении, спасибо!
0
|
|
|
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
|
|||||||
| 19.04.2024, 09:13 | |||||||
|
Кликните здесь для просмотра всего текста
0
|
|||||||
|
0 / 0 / 0
Регистрация: 07.04.2021
Сообщений: 5
|
||||||
| 10.02.2026, 13:44 | ||||||
|
Я поместил выполнение нескольких QUERY
в do while если срабатывает catch то break вот типо такого, не знаю может это неправильно, но нужную остановку он мне делает.
0
|
||||||
| 10.02.2026, 13:44 | |
|
Помогаю со студенческими работами здесь
13
Остановка выполнения кода и ожидание реакции пользователя
Остановка программы, после выполнения условия Остановка сразу после выполнения system()
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|