Board logo

Subject: [讨论]关于异常 [Print This Page]

Author: jAmEs_    Time: 2007-8-17 17:43     Subject: [讨论]关于异常

一般情况下,异常都采用
try
except
end;
的形式来截获,但是这样的嵌套多了的情况下,代码越来越难看,又或者我们数据库处理事务时,一般都:
con.BeginTrans();
try
  ...
  con.CommitTrans();
except
  con.RollbackTrans();
end;
有没有一种类似这样的方法:
AutoTrans(con);
...
其实主要就是怎么实现在作用域内,AutoTrans可以检测到异常退出调用还是正常退出。
还原探讨~~
Author: Passion    Time: 2007-8-17 19:46

把AutoTrans写成函数,里头用try except
Author: zzzl    Time: 2007-8-17 20:11

同意楼上,把看不顺眼的东西藏起来
Author: jAmEs_    Time: 2007-8-17 21:58



QUOTE:
原帖由 Passion 于 2007-8-17 19:46 发表
把AutoTrans写成函数,里头用try except

晕,但是我是希望能通用化啊,你那样还不是一样?
Author: shenloqi    Time: 2007-8-18 21:08

我有一些尝试,用接口的自动引用计数等实现的,不过个人还是觉得不如直接try ... except ... end来的明了
Author: kendling    Time: 2007-8-19 01:25

对哇,简单的东西不要搞得太复杂。。。
Author: jAmEs_    Time: 2007-8-19 14:10

其实就是为了简单才这样

你们听说过方面编程吧?我想这个也有这样类似的目的

比如你的代码原来没有这方面的处理,如果要增加,我直接增加一行就行了,但是try except end 则要做比较多的代码处理。
Author: skyjacker    Time: 2007-8-19 20:42

数据库的事务处理可以封装在基类里,这个一个系统中就只有一份代码啦。
Author: bahamut8348    Time: 2007-8-29 10:19

涉及数据库的"事务",个人建议,像:
con.BeginTrans();
try
  ...
  con.CommitTrans();
except
  con.RollbackTrans();
end;
这种语句不建议写在EXE工程里(当然包括DLL),

个人认为,完全可以在SQL(ORCALE)里写一个存储过程,由存储过程控制事务总数和事务的开启、关闭,而在工程里要做的只是调用这个存储过程,并给他传递正确的参数就可以了
Author: Passion    Time: 2007-8-29 14:25

确实写存储过程里头高效不少。
Author: jAmEs_    Time: 2007-8-29 16:20

大家讨论的似乎有些跑题了,我只是举例子而已,类似的情况还是有的,而不只是这个。
另外,我说说自己的一些观点,存储过程也有一定的限制,比如调试没那么方便,管理也不一定方便。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0