关于扩展Exception,实现自定义异常抛出...

zouxinke 2008-01-03 03:40:12
我在写一个让第三方调我方数据库的接口,打算用类把数据库的操作封装好.
我的业务层涉及到人员的增加与删除,比如增加一名人员我就向数据库Insert一条记录
但第三方开发人员只能通过我的类方法来增加.
这样有一个问题,如果在操作过程中产生异常,则系统抛出异常会让第三方人员看不懂.
比如某某存储过程有错,某某表违反了主键约束.
所以我又想在我的类中抛出让他们看得懂的异常,比如用"该名人员的编号已被占用"来代替违反了主键约束.
所以自己扩展Exception类,并加了个自己定义的errorsNumber成员,该成员为自己定义的错误代码.
这样我将开发文档给第三方时,同时附上一份将有可能被抛出的异常的字典.不知这样做可不可行,以下是字典和代码:

字典:
代码 Message 详细
--------------------------
101 该名人员的编号已被占用 该人员编号已在数据库中存在
102 该名人员尚有任务在身,不能删除 要删除该人员请先删除所属该人员所有待执行的任务

自定义异常类:
class MyException:System.Exception
{
public MyException() : base() { }
public MyException(string message):base(message){}
public MyException(string message,Exception innerException):base(message,innerException){}
public MyException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
public MyException(string message,int errNumber){

this.errorsNumber = errNumber;
this.strMessage = message;

}
public override string Message
{
get
{
if (strMessage == string.Empty)
{
return base.Message;
}
else
{
return strMessage;
}
}
}
private string strMessage=string.Empty;
public int errorsNumber ;
}

使用:
private void button1_Click(object sender, EventArgs e)
{
try
{
throw new MyException("该名人员的编号已被占用", 123);
}
catch (MyException er) {
if (er.errorsNumber == 123) {
//处理
}

}
}

...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilanwuyu123 2008-01-04
  • 打赏
  • 举报
回复
MSDN里面很详细。
zouxinke 2008-01-04
  • 打赏
  • 举报
回复
哈哈..同时也感谢 Ivony 的意见.既然我的错误里有 ErrorNumber 和 Message
那第三方人员具体用哪个,或者喜欢哪个就不管他了.我相信有像我这样喜欢用 ErrorNumber 也有像Ivony 那样喜欢用Message ....
两个都具备的话就不会被人说了..
Ivony 2008-01-03
  • 打赏
  • 举报
回复
if(er.Message=="该名人员的编号已被占用"){
//做相应处理或提示
}


其实软件开发中有很多这种莫名其妙的问题,
你觉得是这样if(er.ErrorNumber==123)更向人说的话还是这样if(er.Message=="该名人员的编号已被占用")更像人说的话?
zouxinke 2008-01-03
  • 打赏
  • 举报
回复
ErrorNumber是让第三方调用时可以用
if(er.ErrorNumber==123){
//做相应处理或提示
}

而不是
if(er.Message=="该名人员的编号已被占用"){
//做相应处理或提示
}


看来我可以确定这样干了,感谢 Zine_Alone *小飞*
Ivony 2008-01-03
  • 打赏
  • 举报
回复
直接输出详细信息不行么?
Ivony 2008-01-03
  • 打赏
  • 举报
回复
不知道ErrorNumber的意义何在,纯属没事找事,还要去翻字典。
Zine_Alone 2008-01-03
  • 打赏
  • 举报
回复
可以滴~大部分做法都是这样做的

110,536

社区成员

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

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

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