博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
阅读量:6173 次
发布时间:2019-06-21

本文共 1939 字,大约阅读时间需要 6 分钟。

在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加、修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多约束,在此暂不讨论,本篇文章主要讲的是,如何判断是否为SQL的引用约束异常,从而能够更好的将SQL复杂的报错转换为用户能够明白的友好提示。

扩展Exception,增加判断Exception是否为SQL引用约束异常方法(IsSqlReferenceConstraintException):

public static bool IsSqlReferenceConstraintException(this Exception except)        {            var baseEx = except.GetBaseException();            if (baseEx is SqlException)            {                string message = (baseEx as SqlException).Message;                if (message.ToLower().Contains("reference constraint") || message.ToLower().Contains("foreign key"))                {                    return true;                }                else                {                    return false;                }            }            else if (baseEx != null && !object.ReferenceEquals(except, baseEx))//如果基类不为空且不等于异常本身,则继续回调查找            {                return IsSqlReferenceConstraintException(baseEx);            }            return false;        }

原生的SQL报错信息如下:

The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Category_dbo.User_LastEditorID". The conflict occurred in database "mTEM", table "dbo.Category", column 'LastEditorID'.

The statement has been terminated.

而采用扩展方法则会显示出我们预定义的错误信息,调用如下:

public void Remove(int userID)        {            User user=this.repository.Get(t=>t.ID==userID);            if (user != null)            {                try                {                    this.repository.Remove(user, true);                }                catch (Exception ex)                {                    if (ex.IsSqlReferenceConstraintException()) //判断为引用约束错误,则直接抛出我们自定义的错误                    {                        throw new Exception("该账号已有与之相关联的其它业务记录,禁止删除!若确认该账号停止使用,可将其设置为禁用即可。");                    }                }            }            else            {                throw new Exception("该账号信息不存在或已被删除!");            }        }

 

转载地址:http://uomba.baihongyu.com/

你可能感兴趣的文章
懵逼!因周末无人值班,这家银行被黑客一行代码改变了命运
查看>>
《交互式程序设计 第2版》一2.6 对象和属性
查看>>
IDEA 15 license
查看>>
python time
查看>>
获取 GitHub 的 PullRequest
查看>>
Linux JavaHome 测试后仿写
查看>>
SimpleDateFormat 时间格式化输出
查看>>
VMware 12+unlocker208+Mac OS X 10.11.5
查看>>
JVM--对象回收
查看>>
一言不合就学习:JavaScript 资源大全中文版
查看>>
纷乱日志框架,你选谁?
查看>>
A potentially dangerous Request.Form value was ...
查看>>
iphone开发之多线程NSThread和NSInvocationOperation
查看>>
为Liferay运行提速
查看>>
GitLab 版本控制器
查看>>
常见数据结构(二)-树(二叉树,红黑树,B树)
查看>>
Elasticsearch 5.0-基础概念
查看>>
MFMailComposeViewController 发邮件
查看>>
velocity 模板解析类
查看>>
HTTP以及HTTPS协议
查看>>