在程式中,容易出現例外的程式如果沒有例外處理方式,可能會導致程式的奔潰,這就需要我對可能發生例外的程式段,添加一個例外處理的方法,
例外處理的方式: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資料庫的相關例外類
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252593.html
標籤:其他
上一篇:“2020 博客之星”年度總評選 TOP 200 名單已出,速來認領!
下一篇:雙指標,尺取法小結
