用三层开发,DBAccess(数据访问层),Bil(逻辑层),WebUI(界面层)
在界面层里调用 BIl.InsertOrder
Bil层里又调用 DBAccess.execute(',',')更新到数据库那么如果出现错误一定是在 DBAccess.execute(',',')出现错误
这时要在哪一层捕捉进行错误处理,并显示给用户看。
请大家说说都是怎么处理的!
在界面层里调用 BIl.InsertOrder
Bil层里又调用 DBAccess.execute(',',')更新到数据库那么如果出现错误一定是在 DBAccess.execute(',',')出现错误
这时要在哪一层捕捉进行错误处理,并显示给用户看。
请大家说说都是怎么处理的!
解决方案 »
- .net现实数据的各种相关与不同
- 网站做好了,空间也买好了,数据库怎么发布?
- 如何实现asp.net和javaScript的直接通讯?
- 一個頁面中,有個DATAGRID.有沒有辦法同時導出到EXCEL文件中呢?
- 一个关于Asp插入数据库的问题
- 提问 关于网上播放电影的一些问题
- .net 如何在让百度搜索的内容显示在自己的网站里面?绑定搜索结果
- 求教大牛一个问题,急啊。关于c#代码中执行sql批处理问题中关于'go'附近语法错误的问题
- vs.net中制作asp.net,与access连接不上,求教!
- 如何得到网页里所有层的name的值
- <---------------Web Service中的CookieCollection谜团-------------------->
- 急问!!!
然后返回个值
其他的层只要这个值就可以拉
层层catch乱费资源
可以写log文件,然后抛出一个自定义的异常到逻辑层。2、逻辑层:
可以写log文件,做错误解析,给界面层一个返回值。
3、界面层:
应该根据逻辑层的返回值等作错误处理,比如提示框等告知用户。
继续关注!
smin1994(smin1994)的逐层catch,可以返回到页面上要怎么做。
有没有例子参考一下。
以上这几种各有优缺点。最不应该用的就是层层catch吧。很浪费的,代码也会长不少。
{。。}
public class DBAccess
{
public void OpenConnection()
{
try
{
DBConnection.Open();
}
catch(Exception e)
{
DBException dbe=DBException.GetDBException(ErrCode.ExecuteNonQuery,e);
throw(dbe);
}
}
}
{
.
.
.
.
public static string GetDBErrMsg(ErrCode DBErrCode)
{
string ErrMsg="";
switch(DBErrCode)
{
case (ErrCode.OpenCn):
{
ErrMsg= "打开数据库连接错误!——";
break;
}
case (ErrCode.ExecuteReader):
{
ErrMsg= "读数据库错误!——";
break;
}
case (ErrCode.ExecuteNonQuery):
{
ErrMsg= "执行数据库命令错误!——";
break;
}
case (ErrCode.BeginTransaction):
{
ErrMsg= "开始数据库事务处理错误!——";
break;
}
}
return ErrMsg;
}
}
建议在不是文档很正规的情况下,不要使用自定义异常,否则,人员一旦变动,或者即使是自己,过了一段时间,都不知道自定义的是什么了。而使用原始异常就没这个问题--一家之言
----------------------------------------------------------------------------------
RE:catchdream(星剑)
你知道异常类是写在什么地方的吗?人员变动和自定义异常有什么关系?你意思是,换了个人,不用自定义异常类,就不用熟悉以前的代码了?对于自己写的异常类,自己都看不懂,那只能说这个类是你盗窃的!还有一点!!自定义异常类,和文档规范不规范是没有关系的!异常类是写在类模板的数据访问层里面的(至少我是这样)。你知道什么叫分层吧??
sigh ,你无非是捕捉系统抛出的异常,另外抛出自己的异常吧,我问你,你确定在这个系统中只有你定义了异常类?要是没个人都定义一个,那你自己去看代码吧,另外,你作的每个系统定义的异常类是相同的么?要是这样,那么恭喜你了,否则,挑战自己的记忆力吧,我是觉得我没有这么好的记忆力的。
数据访问层的代码,你们公司是一个系统一个访问层吗?那你们还要访问层做什么啊?每个公司为什么要定义自己的一套类模板?一个类模板里面会有多个异常类吗??对!我们公司的异常类,就是我定义,因为类模板就是我来写,别人直接用。
case (ErrCode.OpenCn):
{
ErrMsg= "打开数据库连接错误!——";
break;
}
case (ErrCode.ExecuteReader):
{
ErrMsg= "读数据库错误!——";
break;
}
case (ErrCode.ExecuteNonQuery):
{
ErrMsg= "执行数据库命令错误!——";
break;
}
case (ErrCode.BeginTransaction):
{
ErrMsg= "开始数据库事务处理错误!——";
break;
}
你认为这几个CASE不是所用访问数据通用的?请问一下!在什么系统下不能用这几个CASE。当然,在用的过程中,发现有不足的!随时加CASE!对于扩展性,也是没有问题的!
请继续提出你的高见!
-----------------------------------------------------------------
异常是向上层堆栈递归的
总的来说在UI层是一定会捕获的
如果想知道在哪里抛出的 Exception 已经提供了那样的功能
同时在一个地方统一处理也便于管理
-----------------------------------------------------------------我的思想也和你一样。所以我在访问层里面,对每个对象内部进行异常的捕获。
例(如上方法):OpenConnection()这个方法,做为对象来用,出现异常就可将该对象的异常抛出来显示!并不需要一层一层的捕获。
(欢迎不同意见提出,共同讨论)
public class DBException:Exception
{。。}
public class DBAccess
{
public void OpenConnection()
{
try
{
DBConnection.Open();
}
catch(Exception e)
{
DBException dbe=DBException.GetDBException(ErrCode.ExecuteNonQuery,e);
throw(dbe);
}
}
}
高见不敢,我开始就说处了一个前提,是文档齐全,我问你,没有文档,别人用的异常类时,是自己翻到你的代码来看你自己怎么定义的?而且要真定义异常类,系统中不可能只有数据库连接的异常类吧,那些可不是相同的吧
我都说了,是捕获数据访问的异常,这里讨论的也是数据访问的异常。你的意思也就是说,没有自定义异常类的话,类模板就不需要文档?就不用告诉别人怎么用里面的对象?既然需要,既然有的话!!那教人用类模板中的异常类,就是必然的!既然是必然的,为何一定要停留在牛角尖上?教人用的方式,也不一定要用文档的形式,配合默契的开发小组(技术水平平均),可以把使用类模板文档的时间给节约下来。
所以,也不一定是非要文档齐全,才能自己自定义异常类的,首先请你搞清楚,异常类的好处在什么地方?如果按CMM标准做开发,光写齐全的文档都写死你,你也不用做开发了,可以当文员了。
{
ErrMsg= "打开数据库连接错误!——";
break;
}
case (ErrCode.ExecuteReader):
{
ErrMsg= "读数据库错误!——";
break;
}
case (ErrCode.ExecuteNonQuery):
{
ErrMsg= "执行数据库命令错误!——";
break;
}
case (ErrCode.BeginTransaction):
{
ErrMsg= "开始数据库事务处理错误!——";
break;
}
从以上几个CASE中都能看出,捕获的异常有数据库的连接、读取数据、执行SQL命令及事物的处理。
你认为这些抛出的异常不全吗?那你可以提出来。
我常用的是:在底层只写一下日志。然后在显示层捕捉所有异常(一般而言,不能显示调试中那个出错的黄页给用户看,否则用户不知所措了。)对典型异常,转换成用户可以理解的方式(比如数据库数据重复,通过查找异常中的关键字即可知道)。其他错误进行屏蔽。
建议在不是文档很正规的情况下,不要使用自定义异常,否则,人员一旦变动,或者即使是自己,过了一段时间,都不知道自定义的是什么了。而使用原始异常就没这个问题--一家之言
-------------------------------------------------------------------------------------
这些就是你本想说的是数据库操作以外的异常?
值得深思。
可是对于我说的这3种情况:关键字和现有冲突,操作表锁定,关联表被锁定。要求不同的处理方式呢?比如:关键字和现有冲突,我要求清楚给用户提示信息,让他修改关键自,而其他两种情况则屏蔽掉(只写日志以便复查用),怎么用你的Exception来实现呢,是不是扩充?那我再有其他情况,再扩充?
-----------------------------------------------------------------------------------
回复人: zyug(LovlyPuppy) ( ) 信誉:100 2005-09-15 11:20:00 得分: 0
异常是向上层堆栈递归的总的来说在UI层是一定会捕获的如果想知道在哪里抛出的 Exception 已经提供了那样的功能同时在一个地方统一处理也便于管理
-----------------------------------------------------------------------------------
这位朋友已经说的很清楚了,我也很赞成他的意见,如果你有不同的意见,也可以提出!
我准备用liuxiang027(Nail.柳翔) 的方法来捕捉数据访问层的错误,然后在表示层有选择的显示。
大家有好的方法多说说啊,三人行必有我师焉嘛