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

简介:

在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加、修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多约束,在此暂不讨论,本篇文章主要讲的是,如何判断是否为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://www.cnblogs.com/zuowj/p/4414031.html  ,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 缓存 Java
sql优化方法
sql优化方法
20 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
113 1
|
1月前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
31 0
|
2月前
|
SQL 存储 BI
sql server 2012远程链接的方法及步骤
sql server 2012远程链接的方法及步骤
22 1
|
14天前
|
SQL Oracle 关系型数据库
常见 SQL 注入绕过方法
常见 SQL 注入绕过方法
|
14天前
|
SQL Oracle 关系型数据库
利用 SQL 注入提取数据方法总结
利用 SQL 注入提取数据方法总结
|
14天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结
|
14天前
|
SQL 数据库
常见寻找 SQL 注入方法总结
常见寻找 SQL 注入方法总结
|
21天前
|
SQL 数据库
常用SQL查询方法与实例
常用SQL查询方法与实例
35 0
|
22天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103483 1