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數據庫的相關異常類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章