2011-08-25 49 views
2

我在我的C#客戶端執行Oracle PL/Sql存儲過程的嘗試塊。我使用Exception類的1個catch塊。顯示來自Pl/sql proc到客戶端的錯誤信息

在存儲過程中,如果在數據處理過程中遇到特定情況,那麼使用raise_application_error引發異常。

爲如:RAISE_APPLICATION_ERROR(-20001,myErrMsg)

那麼我想趕上這個異常,並顯示在C#客戶端這個特殊的消息,因爲它是。 併爲所有其他數據庫相關的錯誤例如。約束失敗,連接錯誤,我想趕上他們,然後在c#客戶端中顯示我的自定義錯誤消息。

在我的catch塊中,要確定是否從proc拋出了上述異常,我應該在異常消息字符串中搜索字符串「ORA-20001」,然後將它傳播到客戶端是什麼?

請指教。

謝謝。

回答

1

如果可以的話,抓住Oracle異常。

try 
    { 
     cmd.CommandText = "DELETE FROM myable"; 
     cmd.ExecuteNonQuery(); 
    } 
    catch (OracleException ex) 
    { 
     //Put your ORA-20001 logic here, or call a common method as shown 
     HandleOracleException(ex); 
    } 

在catch處理程序中,檢查數字是否爲20001,然後採取適當的措施。

這裏有OracleException

的一些性質

數據源 指定包含信息是連接到Oracle實例

錯誤 TNS的名稱指定一個或多個OracleError對象的集合包含有關 有關Oracle數據庫生成的例外的信息

的InnerException 繼承自Exception

消息 指定發生在異常的錯誤消息

編號 指定Oracle錯誤號

步驟 指定存儲過程導致異常

來源 指定生成錯誤

堆棧跟蹤 從異常

TargetSite 繼承自Exception

鏈接繼承獲取更多信息的數據提供者的名稱:

http://download.oracle.com/docs/cd/B19306_01/win.102/b14307/OracleExceptionClass.htm

+0

感謝Jon的投入。 – Jimmy