2013-05-03 120 views
0

我試圖插入一個新的成員到數據庫中, 當有一個重複的catch塊工作正常。 但是當有一個新成員trycatch塊 返回其消息。這是我的代碼。嘗試不正常工作

if (Request["cmd"] == "ins") 
{ 
    try{ 
     mydb db = new mydb(); 
     member newm = new member() 
     { 
      Id = Request["uid"], 
      Name = Request["uname"] 
     }; 

     db.AddTomembers(newm); 
     db.SaveChanges(); 
     Response.Write("ok"); 
     Response.End(); 
    } 
    catch(Exception s) { 
     Response.Write(s); 
     Response.End(); 
    } 
} 
+0

「返回他們的消息」是什麼意思?請注意,如果您要修復縮進,您的代碼將會非常簡單。 – 2013-05-03 14:36:32

+0

異常發生在哪一行? – gwin003 2013-05-03 14:36:44

+1

不可能完成try和catch都被觸發.... – 2013-05-03 14:36:52

回答

6

這不是從真正的問題清楚,但我強烈懷疑問題是,Response.End()拋出的記載異常(ThreadAbortException):

爲了模擬在ASP中的End方法的行爲,此方法嘗試引發[ThreadAbortException]異常。如果嘗試成功,調用線程將被中止,這對您的網站性能不利。在這種情況下,執行End方法調用後沒有代碼。

您正在捕獲該異常,然後再次調用它。只要將Response.Endfinally塊 - 或者理想,完全刪除它,構建控制流,所以你並不需要它...再次,作爲記載:

僅提供兼容性此方法與ASP--即與ASP.NET之前的基於COM的Web編程技術的兼容性。如果您想要跳轉到EndRequest事件並向客戶端發送響應,通常最好調用CompleteRequest。

(請注意,如果你抓到了特定例外,而不是僅僅Exception,你不會有這個問題無論是。)

+0

是不是'ThreadAbortException'應該是不可捕獲的? – Andomar 2013-05-03 14:38:44

+1

@Andomar:不,你可以捕捉它 - 但它會自動重新拋出在catch結尾處,除非你明確地禁止了這種行爲。 – 2013-05-03 14:39:06

+0

當我嘗試將重複數據插入數據庫並且正常工作時,發生異常。但如果我刪除Response.End(),我將發送其餘的HTML到客戶端。我只是想發一個簡單的信息來說它成功與否。 – 2013-05-03 15:03:44

0

如果你試圖調用Response.End()Page_Load事件的asp.net,它將無法正常工作。看看這個主題:Response.End() doesn't abort current thread,看看如何解決它。

儘量避免對asp.net應用程序的響應,嘗試顯示面板,使用標籤來顯示消息。