C#学习笔记-程序中的异常处理

在程序中,容易出现异常的程序如果没有异常处理方式,可能会导致程序的奔溃。这就需要我对可能发生异常的程序段,添加一个异常处理的方法。

异常处理的方式:1、即时处理:发现异常,即时处理异常,恢复程序的运行

                             2、抛出异常:捕获异常之后,向上抛出异常(throw)

常用两种形式:try ....catch....(finally)

                         自定义异常 throw。自定义异常没有引发CLR异常,而是通过ApplicationException派生出来的异常。

1.try....catch....finally(捕获和处理异常)

    try{ 可能发生异常的代码}

   catch{异常处理的方式} 可以有多个catch,表示多路捕获,但是一定要加入Exception这个异常捕获。

    public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try 
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
            catch (SqlException ex ex)
            {
                //将异常信息保存在日志中(略)...

                throw ex; 
            }

            catch (Exception ex)
            {
                //将异常信息保存在日志中(略)...

                throw ex; 
            }
            finally
            {
                conn.Close();
            }
        }  

    finally在程序的运行中没有表明一定要加上,只是加上finally,finally的内容一定会被执行到。

    public int Update(string sql, SqlParameter[] param = null)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand com = new SqlCommand(sql, conn);
            if (param != null)
            {
                com.Parameters.AddRange(param);//添加SQL语句参数
            }
            //可能出现异常的代码
            try
            {
                conn.Open();
                return com.ExecuteNonQuery();
            }
            //发生异常时的处理
            catch (Exception ex)
            {
                //可以在这个地方捕获ex对象相关信息,然后保存到日志文件中...
                LogHelper.WriteLine("执行 public static int Update(string sql时发生异常)" + ex.Message);
                //throw new Exception("执行 public static int Update(string sql时发生异常)" + ex.Message);
                return -1;
            }
            
            finally
            {
                conn.Close();//在数据库操作中,无论是否发生异常,最后都必须关闭连接。
            }

        }

2.自定义异常

自定义异常的封装:  throw new Exception("输入的数值必须大于10");

自定义异常没有引发CLR异常,而是通过ApplicationException派生出来的异常。因此自定义异常要慎用,否则可能会导致程序异常奔溃

   private void InputNum(int num)
        {
            if (num < 10)
                throw new Exception("输入的数值必须大于10");
            else if (num < 100)
                throw new Exception("输入的数值必须小于100");
            else
            {
                //其他验证
            }

        }

3.异常上抛   底层调用者=》中层调用者=》...=》顶层调用者

4.常见的异常类

ArgumentException:用于处理无效参数的异常类

FormatException:用于处理参数格式错误的类

IoException:与文件操作相关的类

OverFlowException:内存溢出的相关类

SqlException:sql server数据库的相关异常类

你可能感兴趣的:(C#学习笔记,exception,c#)