捕捉异常

tony-src 2010-12-14 12:45:29
若存在一个DBHelper类,用来作数据库操作的,如果try{}catch{}在DBHelper类里面做的话...异常被抛出,但调用这个类的方法如果还没执行完...抛出异常后,它还在继续执行;

大侠们有什么办法处理这种数据库异常呢?
如果我异常在外面做的话;数据库又怎么关闭呢?
...全文
83 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pfp251 2010-12-15
  • 打赏
  • 举报
回复
DBHelper如果是无返回的值的数据库操作可以让方法返回一个bool类型的值,操作成功返回true,操作不成功返回false
try
{
//数据库操作代码
return true
}
catch(Exception ex)
{
//写日志
return false
}
finally
{
//关闭数据库连接
}

如果是有返回值的数据库操作,操作成功返回数据集,不成功则返回空,在程序外可以判断
try
{
//数据库操作代码
return 数据集}
catch(Exception ex)
{
//写日志
return null
}
finally
{
//关闭数据库连接
}

tony-src 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jacky_341086 的回复:]
引用 6 楼 winner213 的回复:
两种方法,随LZ喜欢:
1. DBHelper 里面用try catch,那么DBHelper里面的每一个Public 函数都要有一个Return值,用户在调用时可以根据这个Return值走你的代码逻辑.
2. DBHelper 里面不用Try catch,用Throw exception,在外面扑捉


那怎么关闭SQL连接???这个我之前……
[/Quote]

我现在用的一般都是第一种方法!!!!
tony-src 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 winner213 的回复:]
两种方法,随LZ喜欢:
1. DBHelper 里面用try catch,那么DBHelper里面的每一个Public 函数都要有一个Return值,用户在调用时可以根据这个Return值走你的代码逻辑.
2. DBHelper 里面不用Try catch,用Throw exception,在外面扑捉
[/Quote]

那怎么关闭SQL连接???这个我之前想过的~~~~
tony-src 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 svview 的回复:]
楼主意思是想捕捉这个异常,然后返回给上级吧?只要捕捉到异常,程序就停止?是吧?
[/Quote]
是的~~~
winner213 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jacky_341086 的回复:]
引用 8 楼 jacky_341086 的回复:
引用 6 楼 winner213 的回复:
两种方法,随LZ喜欢:
1. DBHelper 里面用try catch,那么DBHelper里面的每一个Public 函数都要有一个Return值,用户在调用时可以根据这个Return值走你的代码逻辑.
2. DBHelper 里面不用Try catch,用Throw exception,在外面......

我现在用的一般都是第一种方法!!!
[/Quote]

如果你用第一种方法的话,那就再你的finally里面写关闭连接的操作.
try
{}
catch{}
finally
{
if(null != sqlConnection)
sqlConnection.Close()
}
yalan 2010-12-14
  • 打赏
  • 举报
回复
很简单,建议用using()代码块来访问数据,以保证数据绝对被释放;

比如:
try
{
using(SqlConnection conn=new SqlConnection(connstring))
{
conn.Open();
//做你要做的操作
}
}
catch
{
//即使数据连接有错误,也没关系,using已经释放他了呵呵
}
winner213 2010-12-14
  • 打赏
  • 举报
回复
两种方法,随LZ喜欢:
1. DBHelper 里面用try catch,那么DBHelper里面的每一个Public 函数都要有一个Return值,用户在调用时可以根据这个Return值走你的代码逻辑.
2. DBHelper 里面不用Try catch,用Throw exception,在外面扑捉
wuyq11 2010-12-14
  • 打赏
  • 举报
回复
异常可以分为系统异常和业务异常,业务异常必须被转化为业务执行的结果
DataAccess层不得向上层隐藏任何异常
要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,
而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常
BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果
UI层除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户
一般使用log4net实现日志记录和自定义异常处理
全栈深入 2010-12-14
  • 打赏
  • 举报
回复
如果try{}catch{}在DBHelper类里面,你可以往这个方法加加一个返回来的布尔值,如果DBHelper里面抛异常了,则返回false,成功了就true,(或者加一个out bool flag的参数放在方法参数里面)

外层调用的地方根据返回的true或者false来进行判断和处理,如果是false了就不执行下面的程序跳出返回了,如果是true的话就继续执行了
戒指 2010-12-14
  • 打赏
  • 举报
回复
楼主意思是想捕捉这个异常,然后返回给上级吧?只要捕捉到异常,程序就停止?是吧?
whrspsoft3723 2010-12-14
  • 打赏
  • 举报
回复
把dbhelper重新改造下,里边执行单元加上 try catch finally之类的。

加上一些参数,返回错误 。
调用 时捕获,还是同样的东西,没有必要浪费那么多代码。



110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧