Raiserror в процедуре (SQL Server 2014) не перехватывает клиентскую сторону (C#)
Хранимая процедура Catch block code.
alter PROCEDURE [dbo].[TESTError]
(
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT 5/0
END TRY
BEGIN CATCH
DECLARE @ErrorNumber INT
SELECT @ErrorNumber = ERROR_NUMBER()
RAISERROR
(N'The error code is: %d',
16, -- Severity.
1, -- State.
@ErrorNumber,
'');
END CATCH
END
Вышеупомянутая хранимая процедура выбрасывает и показывает ошибку при запуске с использованием SSMS.
Клиентский код.Net только исключительная часть.
catch (SqlException ex)
{
string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
}
Когда приложение вызывает хранимую процедуру, оно не попадает в блок исключений.
Любой намек или идея помогут мне.
1 ответ
catch (SqlException ex)
{
string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
}
Что вы ожидаете, даже если этот блок-ловушка был введен? Строковая переменная получит значение, которое исчезнет в следующую микросекунду...
В любом случае: всякий раз, когда вы имеете дело со специализированными (типизированными) блоками уловов, у вас должна быть веская причина не иметь дополнительного улавливающего блока (как последний из ваших специализированных):
catch (System.Exception sysex)
{
string msg = string.Format("Error number: {0} / Message: {1}", sysex.Number, sysex.Message);
//Do something with this information!
}
Или просто
catch{throw;}
Это зависит от ваших потребностей и инструментов / привычек отладки...