前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c#异常处理的形式和原则

c#异常处理的形式和原则

作者头像
MaybeHC
发布2024-04-23 18:26:07
800
发布2024-04-23 18:26:07
举报
文章被收录于专栏:技术之路技术之路

一、异常处理形式

1.及时处理:发现异常随即处理并恢复程序。 2.抛出异常:捕获异常后,重新封装异常信息或直接抛给调用者

二、编写异常处理的原则

在可能发生异常的地方添加异常处理方法

三、异常对象提供的重要信息

属性名称

说明

Source

此属性表示导致异常发生的应用程序或对象的名称

Message

提供引起异常的详细信息

StackTrace

此属性提供在堆栈上所调用方法的详细信息,并首先显示最近调用的方法

四、异常处理

下面以一次数据库的删除为例子。 前提条件:该条删除语句删除的记录存在外键约束 这里我是三层结构先贴出来,未做处理异常的代码 底层

代码语言:javascript
复制
  class SQLHelper{
        public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            int result = cmd.ExecuteNonQuery();
            conn.Close();
            return  result;
        }
   }

Service层

代码语言:javascript
复制
class StudentService
    {
        public int DeleteStudentById(string studentId)
        {
            string sql = "delete from Students where StudentId=" + studentId;
            return SQLHelper.Update(sql);
        }
    }
代码语言:javascript
复制
    class Program
    {
        static void Main(string[] args)
        {
            StudentService studentService = new StudentService();
            studentService.DeleteStudentById("100001");
            Console.ReadKey();

        }
    }

上面的代码运行,会报以下错误

这里写图片描述
这里写图片描述

下面我们进行异常的处理 从底层开始。底层将第一次捕获的异常传递给上级调用者进一步详细处理,一般在底层的抛出异常处会加日志的存储

代码语言:javascript
复制
 public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);

            try
            {
                conn.Open();
                int result = cmd.ExecuteNonQuery();
                return result;
            }
            catch(Exception e)
            {
                //将异常信息保存在日志中。。。
                throw e;
            }
            finally
            {
                conn.Close();
            }


        }

调用者怎么进一步处理异常呢?我们来看下面的处理,e.Number==547 ,547表示外键约束异常

代码语言:javascript
复制
        public int DeleteStudentById(string studentId)
        {
            string sql = "delete from Students where StudentId=" + studentId;
            try
            {
                return SQLHelper.Update(sql);
            }
            catch(SqlException e)
            {
                if (e.Number == 547)
                    throw new Exception("该学员在其他数据表使用,不能被删除");
                else
                    throw new Exception("数据库操作出现问题,不能执行删除!具体信息:" + e.Message);

            }
            catch (Exception e)
            {
                throw new Exception("数据库操作出现问题,不能执行删除!具体信息:" + e.Message);
            }

        }

1.多路捕获异常不是必须的,只有需要的时候才使用 2.可以添加多个catch块 3. 一定要把Exception类放在最后

下来看前端的处理

代码语言:javascript
复制
class Program
    {
        static void Main(string[] args)
        {
            StudentService studentService = new StudentService();
            try
            {
                int result = studentService.DeleteStudentById("100001");
                if (result == 1)
                {
                    Console.WriteLine("删除成功");
                }
                else
                {
                    Console.WriteLine("删除失败");
                }
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();

        }
    }
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、异常处理形式
  • 二、编写异常处理的原则
  • 三、异常对象提供的重要信息
  • 四、异常处理
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com