我正在使用 asp.net,我一直在努力寻找一种巧妙的方法来处理错误,如果有错误,则将错误消息传递给用户。例如,我有一个 User 类、UserManager 类和一个 Database 类。想象一下,我想显示所有用户,显示我从 UserManager 调用方法 GetAllUsers,它返回一个 User 对象列表。此方法创建一个数据库对象并调用方法 ExecuteQuery(string query)。
编辑: 现在我的问题是,假设 ExecuteQuery() 方法出现问题(无法打开数据库)。我想通知用户打开数据库连接时出了点问题。我应该如何做到这一点并以一种巧妙的方式处理它?</p>
编辑 2:
你会这样做吗?还是别的?
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
}
}
这是一个好方法吗?
最佳答案
这完全取决于您在执行查询时遇到的问题类型。这些问题可能是从找不到记录到连接失败的任何问题。如果问题是您可以测试的,即缺少记录,您可以对此进行测试并向您的用户显示一条消息,说明未找到任何记录。即使连接失败,您也应该能够对此进行测试并告诉您的用户。
对于您无法测试的问题,根据您正在编写的应用程序类型,您可能希望让应用程序失败并使用一些框架,如 ELMAH记录并报告错误。
尝试这些来 self 的 other post 的链接有关此主题的更多信息
Checked vs Unchecked Exceptions
此外,this excellent article最近发布了
关于C# 最佳实践错误处理和传递错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448025/