我正在爲一個數據庫構建一個使用C#,企業庫和Oracle的ASP.NET Web應用程序。這是我第一次使用Oracle作爲數據庫,到目前爲止,我的經驗並不是那麼棒(我更喜歡使用MS SQL Server)。因此,這裏是場景:如何在C#中使用Enterprise Library處理oracle異常?
用戶可以輸入和更改數據庫中唯一字段的值(例如 - 用戶名)。如果用戶輸入了一個已經作爲不同記錄輸入的值(在這種情況下是用戶名),那麼需求就是通知用戶。由於插入和/或更新是通過存儲過程完成的,我決定在存儲過程中處理異常。我這樣做是通過聲明NUMBER類型的輸出參數erCode,並將以下塊添加到SQL語句後面的存儲過程中。
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
erCode := SQLCODE
在該事件的INSERT/UPDATE操作是成功的我回到erCode值爲0
當然,因爲有一個返回值的異常從未在的在try-catch塊捕獲代碼在應用程序的數據訪問層(DAL)中。因此,我回來的erCode值從DAL到業務邏輯層(BLL),然後到我處理它內部 try塊由UI層:
if (errorCode = -1)
{
lblMsg.Text = "Username already exists";
}
else
{
lblMsg.Text = "Username changed successfully";
}
我意識到這是一種可怕的即使oracle的錯誤代碼是一個除了「-1」之外的值,這樣做的方法,那麼用戶名更改成功將被顯示,這將是完全誤導。
我不應該使用System.Data.OracleClient.OracleException類,因爲當我在我的工作場所的企業庫附近使用那個類時,它沒有得到好評。如果我們使用企業庫,那麼我們應該單獨使用它來處理所有與數據庫相關的功能。
這使我想到我的問題;我該如何處理這種情況?是否可以單獨使用Enterprise Library來完成?
所以我正確地認爲,如果返回一個錯誤代碼,那麼它將始終是一個負值? – 2012-07-06 21:30:44
不!如果不是這樣的話,你必須做一個冒煙測試,以便在重複的情況下返回什麼錯誤代碼,並且它可能總是相同的! – 2012-07-06 22:11:57
在這種情況下,如果發生未處理的/意外的異常,那麼我們只會知道發生了錯誤,但我們不知道它的性質是正確的嗎? – 2012-07-07 03:35:08