2016-10-27 44 views
0

存儲過程捕獲塊代碼。程序中的Raiserror(SQL Server 2014)不捕獲客戶端(c#)

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

當應用程序調用存儲過程時,它不捕獲異常塊。

任何一種暗示或想法都會幫助我。

+0

穆爾希德嗨!這個問題解決了嗎?你需要進一步的幫助嗎?請允許我提示一個提示:如果這個問題已經解決,那麼在(最佳)答案的投票櫃檯下面勾選驗收檢查將會非常友善。這將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-block,你還期望發生什麼?一個字符串變量會得到一個值,這是一個微秒...

無論如何:無論何時你處理專門(類型)的catch塊,你應該有一個很好的理由,沒有一個通用的catch-block另外在去年的專門的人的):

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

或者只是

catch{throw;} 

這取決於你的需要和調試工具/習慣...