扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
Posted GarsonZhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展Exception,增加判断Exception是否为SQL引用约束异常方法!相关的知识,希望对你有一定的参考价值。
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加、修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多约束,在此暂不讨论,本篇文章主要讲的是,如何判断是否为SQL的引用约束异常,从而能够更好的将SQL复杂的报错转换为用户能够明白的友好提示。
SQL错误代码均存放在master.sys.messages表中
经过断点跟踪异常,得出,异常的Number就是对应这里的message_id,如图:
因此,我们可以写出扩展方法:
扩展Exception,增加判断Exception是否为SQL引用约束异常方法(IsSqlReferenceConstraintException):
/// <summary> /// 查看是不是约束冲突 /// </summary> /// <param name="exception"></param> /// <returns></returns> public static bool IsSqlReferenceConstraintException(this Exception exception) { var baseEx = exception.GetBaseException(); if (baseEx is SqlException) { if ((baseEx as SqlException).Number == 547) { return true; } else { return false; } } else if (baseEx != null && !object.ReferenceEquals(exception, baseEx))//如果基类不为空且不等于异常本身,则继续回调查找 { return IsSqlReferenceConstraintException(baseEx); } return false; }
调用代码如下:
try { base_module c = new base_module() { rowID = rowID }; entities.Entry(c).State = System.Data.EntityState.Deleted; entities.SaveChanges(); return GZAPISuccess(); } catch (DbUpdateException ex) { if (true == ex.IsSqlReferenceConstraintException()) { return GZAPIBadRequest("删除失败,存在关联数据", EnumResponseCode.errSqlReferenceConstraintException, SqlOOT.DELETE); } else throw ex; }
参考资料:https://www.cnblogs.com/zuowj/p/4414031.html
参考资料:http://www.cnblogs.com/liuzhixian/p/3839787.html
以上是关于扩展Exception,增加判断Exception是否为SQL引用约束异常方法!的主要内容,如果未能解决你的问题,请参考以下文章
判断Exception类中是否有InnerException属性
Sub的构造函数抛出了Exception异常增加新的catch块才能解决
2.建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmoun
有没有办法增加谷歌浏览器中 localStorage 的大小以避免 QUOTA_EXCEEDED_ERR: DOM Exception 22
java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(doubl