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;}

Это зависит от ваших потребностей и инструментов / привычек отладки...

Другие вопросы по тегам