0

存储过程 Catch 块代码。

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

当应用程序调用存储过程时,它不会捕获异常块。

任何提示或想法都会帮助我。

4

1 回答 1

0
catch (SqlException ex)
        {      
            string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
        }

即使输入了这个 catch-block,你期望会发生什么?字符串变量将获得一个值,该值在下一微秒内消失......

无论如何:每当您处理专门的(类型化的)catch 块时,您应该有充分的理由不额外拥有一个通用的catch 块(作为您的最后一个专门的):

catch (System.Exception sysex)
        {      
            string msg = string.Format("Error number: {0} / Message: {1}", sysex.Number, sysex.Message);
            //Do something with this information!
        }

要不就

catch{throw;}

这取决于您的需求和调试工具/习惯......

于 2016-10-27T21:44:24.063 回答