Ами аз съм маймуна с клиентски код, която се занимава много с бази данни. Ето как се справям с това.
Изключенията (raiseerrors), които се случват в SQL, се разпространяват обратно към повикващия. Това ще включва референтни ограничения, уникални нарушения на индекса, по-сериозни проблеми и т.н. По принцип всичко, което не би накарало операцията с данни да се извърши нормално, трябва да бъде разпространено обратно.
Извикващият C# трябва да има това:
catch (SQLException sqlEx)
И след това обработете изключението според нуждите. Те трябва да имат специфичен манипулатор на SQLException. Това е важно.
Обикновено стоя настрана от изходните параметри, защото смятам, че те са свързани с данните, които се транспортират, а не с някакви съобщения за грешка, освен това мога да проверя изключението за кода за грешка на SQL Server, така че всички данни, от които се нуждаем, трябва да бъдат в това изключение.
Освен това, в някои случаи със SQL Server имаме съхранени процедури, които могат да предизвикат „бизнес тип изключения“. В тези случаи добавяме персонализиран номер на грешка (над 50 000) и повдигаме тази грешка в съхранената процедура, когато е необходимо. Като цяло се опитваме да ги сведем до минимум, защото добавят сложност, но в някои случаи установихме, че са необходими.
Сега, тъй като клиентът улавя SQLException, той може да погледне кода на грешката, върнат от SQL Server в изключението и след това да предприеме всяко специално действие (ако е необходимо), когато изключението бъде уловено и номерът на грешката е определена стойност. Това позволява вторично ниво на обработка на грешки въз основа на кода на грешката, ако това се изисква за персонализираните грешки (>50 000).
Това също така позволява на администраторите на бази данни да генерират персонализирани грешки и клиентският код да има последователен начин за справяне с тях. Тогава администраторите на бази данни ще трябва да кажат на маймуната с клиентски код какви са персонализираните грешки, за да могат да се подготвят за тях.
Обикновено не използвам кодовете за връщане за целите на обработката на грешки, въпреки че виждам как могат да бъдат използвани, но това означава повече логика в слоя маймуна на кода, за да разгледате и да се справите с кода за връщане. Ако са проблем, искам обратно изключение, защото тогава мога да се справям с тях последователно. Ако трябва да разгледам и кодовете за връщане, сега има множество начини за обработка на грешки.