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',16,1)
RETURN
END
and it's called from a C# client like so:
try
{
SomeVariable = SqlHelper.ExecuteScalar(GetConnectionString(), "MySP", new object[] { param1, param2});
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
However there's no exception being raised. The condition in the SP is always true for testing. To verify this, I copied the call from SQL Server Profiler and executed it in a query window and the ErrorMessage was printed which means the error is raised.
Not sure what's happening.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With