【发布时间】:2010-07-08 07:52:36
【问题描述】:
我正在创建一个数据访问层,我想在其中处理应由业务层捕获的异常,并清楚地了解异常的来源。 我正在做这样的事情..
编辑
private void OpenConnection()
{
if (ConnectionState.Closed == _connection.State)
_connection.Open();
}
在上面给出的代码中,我知道异常的原因。并想把它扔到BL处理来显示消息。
但我在 DL 中仅使用其他代码行中的此功能。
protected DataTable GetDataTable(string Query)
{
DataTable dt =new DataTable();
SqlCommand cmd = InitializeCommand(Query);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
try
{
OpenConnection();
adp.Fill(dt);
CloseConnection(true);
return dt;
}
catch (SqlException ex)
{ throw ex; }
finally
{
adp.Dispose();
cmd.Dispose();
}
}
现在,如果在尝试打开连接时OpenConnection() 中发生异常,则应用程序在 OpenConnection 本身的 throw ex 行崩溃,而我期待它返回异常。
我应该如何处理这个问题。
此外,在第二个函数GetDataTable 中扩展我的问题,如果发生异常,应该抛出什么样的异常,其细节与此时发生的相同以及如何发生。
我只知道这种方式,但我认为这是一种王方式。
throw new ApplicationException(ex.message,ex.innerexception)
编辑
假设与服务器的连接丢失或我使用了错误的连接字符串。现在我使用 BL 的 GetDataTable 函数。哪里会发生异常,我应该在哪里处理? 我想知道DL中出现的问题。考虑到BL不知道DL的代码
【问题讨论】:
-
在您的第一个代码示例中,如果您要做的只是重新抛出异常,为什么还要使用
try{}catch{}?只需删除所有这些。 -
@Oded:我不知道该怎么做。如果我从第一个块中删除 try catch,它将在我使用它的函数中得到处理。
-
这与现在发生的情况有何不同?您正在重新抛出异常,它会在使用它的函数中得到处理...
-
@Oded:请检查编辑并提供一些有用的建议。
标签: design-patterns api exception exception-handling data-layers