DAL中的异常处理
本文关键字:异常处理 DAL | 更新日期: 2023-09-27 18:08:25
在MVP winforms应用程序中,我在DAL中处理如下异常。
由于用户消息传递不是DAL的责任,所以我想将其移到Presentation类中。
你能告诉我一个标准的方法吗?
public bool InsertAccount(IBankAccount ba)
{
string selectStatement = @"IF NOT EXISTS (SELECT ac_no FROM BankAccount WHERE ac_no=@ac_no) BEGIN INSERT INTO BankAccount ...";
using (SqlConnection sqlConnection = new SqlConnection(db.ConnectionString))
{
using (SqlCommand sqlCommand = new SqlCommand(selectStatement, sqlConnection))
{
try
{
sqlConnection.Open();
sqlCommand.Parameters.Add("@ac_no", SqlDbType.Char).Value = ba.AccountNumber;
//
//
sqlCommand.ExecuteNonQuery();
return true;
}
catch (Exception e) { MessageBox.Show(("Error: " + e.Message)); }
if (sqlConnection.State == System.Data.ConnectionState.Open) sqlConnection.Close();
return false;
}
}
}
EDIT2:
所以根据答案,我重新编辑了帖子,现在我的异常处理代码看起来像这样…
木豆public bool InsertAccount(IBankAccount ba)
{
try
{
sqlConnection.Open();
//
}
catch (SqlException)
{
throw new Exception("DataBase related Exception occurred");
}
catch (Exception)
{
throw new Exception("Exception occurred");
}
}
BankAccountPresenter
private void SaveBankAccount()
{
try
{
_DataService.InsertAccount(_model);
}
catch (Exception e) { MessagingService.ShowErrorMessage(e.Message); }
}
我在DAL中捕获异常的原因是,即使现在我没有记录错误,我将来可能不得不这样做。
这样我可以区分DAL中的错误消息,无论是sql相关的还是一般的。
我的演示器在显示错误信息时使用了消息传递服务。
这个意思满吗?这可以简化吗?
返回false表示出现了异常。
重新抛出它catch(Exception e) {
//blah, maybe add some useful text to e
throw;
}
finally { //close up shop Although, look up what using does first incidentally }
再上一级处理(catch (Exception e) { MessageBox.Show(("Error: " + e.Message)); }
)
对EDIT2的响应:
没关系。但是,您当前的实现将抛出"实际"异常及其堆栈跟踪到bin中,以支持您的有用消息。您需要像这样将其添加为内部异常:
catch(Exception e){
throw new Exception("some helpful message", e);
}