2016-10-27 4 views
0

저장 프로 시저 블록 코드를 캐치합니다.프로 시저 (SQL Server 2014)에서 Raiserror가 클라이언트 측 (C#)을 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하지 않습니다.

어떤 종류의 힌트 또는 아이디어라도 도움이 될 것입니다.

+0

안녕 Morshed! 이 질문이 해결 되었습니까? 추가 도움이 필요합니까? 나에게 한 가지 힌트를 허용하십시오.이 질문이 해결되면 (가장) 답변의 투표 카운터 아래에서 수락 확인을 확인하는 것이 매우 친절한 것입니다. 이것은 1)이 이슈를 해결 된 것으로 표시 할 것입니다. 2) 추종자가 가장 좋은 해결책을 쉽게 찾을 수 있도록합니다. 3) 응답자에게 포인트를 지불하고 4) 포인트를줍니다. 15 포인트의 국경을 넘었으므로 추가로 투표에 기부합니다. 이것은 당신을 감사하는 SO 방법입니다. 해피 코딩! – Shnugo

답변

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

이 캐치 블록이 입력되었다하더라도 어떻게 될 것으로 예상됩니까? 문자열 변수는 다음 마이크로 초가 된 값을 얻을 것입니다 ...

어쨌든 : 특수 (유형화 된) 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;} 

이 사용자의 요구 및 디버깅 툴/습관에 따라 달라집니다 ...