C#學習筆記-程式中的異常處理
阿新 • • 發佈:2021-01-25
在程式中,容易出現異常的程式如果沒有異常處理方式,可能會導致程式的奔潰。這就需要我對可能發生異常的程式段,新增一個異常處理的方法。
異常處理的方式: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資料庫的相關異常類