Try-Catch-Finally倒底應該怎麼用?

來源:互聯網
上載者:User

  今天有個網友問我一個問題。
  她說她有一個頁面,向資料庫儲存了資料,沒儲存成功,也沒報錯,不知道什麼問題。
  我問她啟動並執行時候有什麼異常資訊沒,她說沒有,馬上我感覺到了來自於她的有點不符合常理的嚴峻挑戰。

  問她要代碼,發過來了,頓時我無語了。代碼如下:

 1 public partial class _Default : System.Web.UI.Page 
2 {
3 private string strcon = ConfigurationManager.ConnectionStrings["constr"].ToString();
4
5 protected void Page_Load(object sender, EventArgs e) { }
6
7 protected void Login_Click(object sender, EventArgs e)
8 {
9 OleDbConnection con = new OleDbConnection(strcon);
10 string sql = "insert into text(uname,unickname) values(@uname,@unickname)";
11 OleDbCommand cmd = new OleDbCommand(sql, con);
12 try
13 {
14 cmd.Parameters.AddWithValue("@uname", this.tbUname.Text);
15 cmd.Parameters.AddWithValue("@unickname", this.tbUnickname.Text);
16 con.Open();
17 int i = cmd.ExecuteNonQuery();
18 if (i > 0)
19 {
20 Response.Write("註冊成功");
21 }
22 else
23 {
24 Response.Write("註冊失敗");
25 }
26 }
27 catch (Exception ex)
28 { }
29 finally
30 {
31 con.Close();
32 }
33 }
34 }
35  

  

  從上面的代碼,不難看出她沒有儲存成功也沒有報錯的原因。
  她使用了一個try{}catch(){}finally{}語句組對資料庫的操作進行異常捕獲,但是捕獲完以後並沒有做任何處理就直接完成了。沒儲存成功,理論上肯定會拋出異常,但她捕獲了異常並沒有進行相應的處理,這當然不可能提示錯誤資訊了。

 

  眾所周知,try{}catch(){}finally{}是一個異常處理機制,它所提供的處理錯誤的機制可以為每種錯誤提供定製的處理,並把識別錯誤的代碼和處理錯誤的代碼分離開來。我們可以使用它來處理應用程式中可以預測到的錯誤。
  使用它,就預示著我們要主動對這指定的程式碼片段進行異常處理了,也就是說,catch語句將捕獲try語句塊中出現的指定類型的錯誤,然後使用catch語句塊進行相應的處理操作。
  如果catch代碼塊中沒有任何處理語句,就代表我們要放棄對該異常進行處理,也就是說忽略該異常。

 

  在這裡我想說的是,異常處理是一種技術,技術要有選擇的使用,千萬不可濫用。
  對異常進行處理是為了加強應用程式的健壯性,而不是每個可能產生異常的程式碼片段中都必需要加異常處理。特別是空的catch語句塊千萬要慎用,除非你真的打算丟掉這個異常資訊,連日誌也不打算記錄一下。

 

  在這裡,我建議初學者在調試這段程式的時候就不要添加異常捕獲的功能了。在這段代碼編寫完成以後,選擇確定拋出異常資訊的語句段進行相應的異常處理。

 

  莫名其妙的異常捕獲代碼,千萬要警惕。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.