我使用的是asp.net,我一直在努力處理錯誤,如果有任何錯誤消息傳遞給用戶。例如,我有一個User類,UserManager類和一個Database類。 Imagina我想顯示所有的用戶,顯示我從UserManager調用方法GetAllUsers返回一個User對象列表。此方法創建一個數據庫對象並調用方法ExecuteQuery(字符串查詢)。編輯: 現在我的問題,想象在ExecuteQuery()方法出現問題(無法打開數據庫)。我想在打開數據庫連接時通知用戶出錯了。我該如何做到這一點,並以一種整潔的方式處理這個問題?編輯2:C#最佳實踐錯誤處理和傳遞錯誤消息
你會這樣做嗎?否則呢?
public class Database()
{
private string _Error;
// property error (only get)
private void Open()
{
try
{
// Open DB
// Fails because of error
}
catch(Exception ex)
{
_Error = ex.Message;
}
}
public DataSet ExecuteQuery(string query)
{
try
{
Open();
// Execute query
// return dataset
}
catch(Exception ex)
{
_Error = ex.Message;
return null;
}
}
}
public class UserManager()
{
private string _Error;
// Get property for Error
public List<User> GetAllUsers()
{
Database db = new Database()
Dataset DS = db.ExecuteQuery("my query goes here");
(if DS == null)
{
_Error = db.Error;
return null;
}
}
}
在用戶界面上點擊事件:
protected void onClick_event(args)
{
Usermanager userman = new UserManager();
List<User> users = userman.GetAllUsers();
if(users == null)
{
// make a error panel visible
pnlError.Visible = true;
lblError.Text = userman.Error
}
}
這是一個好辦法?
IMO,你應該只捕獲特定的異常,而不是System.Exception。只捕捉你知道可能會發生的異常,並且你無法預防。其他任何你應該允許的東西都會冒出來。 – jlembke 2009-09-19 17:49:44
我編輯了我的答案,下面有一些鏈接供您查看。 – jlembke 2009-09-19 17:54:38
@jlenbke:你的意思是'冒泡'?以及如何實施? – Martijn 2009-09-21 09:42:26