Ну, я обезьяна клиентского кода, которая много работает с базами данных. Вот как я справляюсь с этим.
Исключения (ошибки), возникающие в SQL, передаются вызывающей стороне. Это может включать ограничения на ссылки, нарушения уникальных индексов, более серьезные проблемы и т. Д. В основном все, что не приводит к нормальной работе с данными, следует распространять обратно.
вызывающий C # должен иметь это:
catch (SQLException sqlEx)
А затем обработайте исключение по мере необходимости. У них должен быть определенный обработчик SQLException. Это важно.
Обычно я не использую выходные параметры, поскольку считаю, что они связаны с переносимыми данными, а не с сообщениями об ошибках, кроме того, я могу проверить исключение для кода ошибки SQL Server, поэтому все необходимые нам данные должны быть в этом исключение.
Кроме того, в некоторых случаях с SQL Server у нас есть хранимые процедуры, которые могут вызывать «исключения бизнес-типа». В этих случаях мы добавляем пользовательский номер ошибки (выше 50000) и при необходимости поднимаем эту ошибку в хранимой процедуре. В целом мы стараемся держать их как минимум, потому что это добавляет сложности, но в некоторых случаях мы сочли их необходимыми.
Теперь, так как клиент перехватывает исключение SQLException, он может посмотреть код ошибки, возвращенный SQL Server в исключении, а затем предпринять любое специальное действие (если необходимо), когда исключение обнаружено и номер ошибки является определенным значением. , Это разрешает вторичный уровень обработки ошибок на основе кода ошибки, если это требуется для пользовательских ошибок (> 50000).
Это также позволяет администраторам баз данных вызывать пользовательские ошибки, и клиентский код должен иметь единый способ их устранения. Затем администраторы баз данных должны были сообщить обезьяне клиентского кода, какие были ошибки, чтобы подготовиться к ним.
Обычно я не использую коды возврата для обработки ошибок, хотя я вижу, как их можно использовать, но это означает, что в слое обезьяньего кода нужно больше логики для просмотра и обработки кода возврата. Если они представляют собой проблему, я хочу вернуть исключение, потому что тогда я буду иметь дело с ними последовательно. Если мне нужно взглянуть и на коды возврата, то теперь существует множество способов обработки ошибок.