三层结构中的错误处理,有点迷惑。大虾指点
三层结构看了些
但里面的错误处理很少,所以对这方面比较想了解一下。
最好能深入些
比如:如果不是致命的错误,则提示详细的错误信息
如果是可以忽略的错误,则继续执行。
如果涉及到数据安全的,则终止执行。
呵呵~~顶着有分
[解决办法]
try
catch
[解决办法]
我顶。
[解决办法]
try
{}
catch
{
}
中进行处理
一般严谨的程序,都是先判断输入的准确性,然后进行处理
如果不是常见的错误,在catch中,我们一般都是直接catch{throw;}直接丢给ASP.NET的错误页面
[解决办法]
一般的应用都会采用自定义Exception来处理,系统中的异常。但是在DB访问层和业务逻辑层只是将异常转化为自定义的异常比如将SQLException转化为AppDBException(该异常为自定义异常)最后的Exception处理(比如显示错误画面,打印日志等)都在表现层处理。
[解决办法]
你可以自己写一个错误类
[解决办法]
底层捕获异常,处理后再抛异常,可以先包装原始异常再抛,UI 层捕获
[解决办法]
可以自己写继承于Exception的异常类来处理
[解决办法]
引言:
在Data层(不算作三层中的一层)
:定义一个错误消息管理的类(有错误消息,错误级别(警告,错误)等等),如ErrMsg.
附:
因为Data层贯穿三层,所以在三层中都可以操作ErrMsg.
具体操作如下:
一个功能开始,定义一ErrMsg对象,当作参数传给功能方法,如果功能方法中捕捉到异常或其它逻辑错误都将错误消息给ErrMsg对象,并将ErrMsg返回到界面层,显示ErrMsg的错误消息.
(其中根据错误级别,来判断是否要返回到前台界面显示)
[解决办法]
实现Global.ascx.cs中的
protected void Application_Error(Object sender, EventArgs e)方法.
加入自己的错误处理机制
Exception exception = ctx.Server.GetLastError ();
if(exception is XXX类型Exception )
{
...
}
[解决办法]
HttpContext.Current.Server.GetLastError ();
[解决办法]
对于 ASP.NET
整站可以统一再 Applicaton_Error 事件中捕获底层异常,然后实施日志、严重等级处理,对于发布版本,用户最后看到的是不暴露内部实现信息的自定义错误信息
同时还有一个页级错误事件 System.Web.UI.Page.Error 可以捕获单页异常
[解决办法]
所有的页面类继承与自己定义的页面基类, 然后在此页面基类中的Error事件中处理所有页面异常
如果是业务层或者数据访问层直接抛出自定义异常进行处理
[解决办法]
up
[解决办法]
try
{}
catch()
{}
finall
{}
在加上一个错误页面.
ok!
[解决办法]
try
{}
catch()
{}
finall
{}
在加上一个错误页面.
ok!
[解决办法]
用
try
{
}
catch(Exception e)
{
//如果方法1有错误
if(e.TargetSite.Name.ToUpper() == "方法1 ")
{}
//如果方法2有错误
if(e.TargetSite.Name.ToUpper() == "方法2 ")
{}
//如果方法3有错误
if(e.TargetSite.Name.ToUpper() == "方法3 ")
{}
}
finall
{
}
[解决办法]
“数据层不进行任何异常处理,而且数据层应该完全的信任业务层的数据”
有同感。
[解决办法]
“数据层不进行任何异常处理,而且数据层应该完全的信任业务层的数据”
是应该各管各的
[解决办法]
看不太懂。。。
[解决办法]
在DB层,做一个返回int类型值的方法,同时也做个捕获异常的方法
在业务逻辑层,获取从DB层返回的int类型的值,来判断DB是否有异常或者执行是否成功,再做一个返回bool类型值的方法,同时也做个捕获异常的方法。
try
catch
就行啊。
[解决办法]
数据层的错误都抛出了
[解决办法]
up
[解决办法]
数据层真的没有必要加上异常处理的(只要你的语句没有写错的话)
无论操作是什么结果,你都可以返回一个值(自己指定的)
用返回来的值在逻辑层做判断不就的了。
开发的时候语句要是写错了,自己单步调试能调出来吧。
交付给用户用的时候try catch finall也就没有什么用了吧(因为逻辑层能根据值得做逻辑判断)
在说了,finall也不是什么很好的阿。无论有没有错误这里面的语句都要执行的吧。
为了捕获一个错误而且是自己在开发过程中的错误,感觉太浪费资源了。
(以上我在存储过程里把对数据库的操作状态都返回来了,在BLL层做的判断)
个人观点!
[解决办法]
底层每一步都返回错误try{}catch(Exception e){
thorw(e);
}
UI进行处理
[解决办法]
try
{
}
catch
{
}