I have a stored procedure on a SQL Server 2005 database which has a statement like this:
IF @Condition = 0
BEGIN
RAISERROR(\'some error message
According to SQL Books online severity of 16 "Indicates general errors that can be corrected by the user." - so that severity is OK.
I only have SQL 2008 to work with, but I have tested the RAISERROR('some error message',16,1) and the error was caught in my c# app. Are you sure the error is not being handled in your "SqlHelper" class?
From the Books online
Specify a severity of 10 or lower to use RAISERROR to return a message from a TRY block without invoking the CATCH block.
Is it something to do with the severity level? If you up severity to 19 does it raise the exception through to your code?
I went through the SQL Helper class and found out that ExecuteScalar eats the exception and returns null. I switched to ExecuteDataSet which doesn't do this. I expected the different Execute.. method to behave the same way. The other way is to use ExecuteScalar and when the SP detects an error, it does a SELECT some error number which can be handled in the client.