2013-05-01 95 views
0

我使用LINQ添加新記錄我的部門表,這是我做的:如何使用LINQ的SubmitChanges方法處理異常?

try 
{ 
    dpt = new departement(); 
    dpt.departementcode = tbDepartementCode.Value; 
    dpt.departementname = tbDepartementName.Value; 
    dpt.createby = "hendra"; 
    dpt.createdate = DateTime.Now; 
    dpt.updateby = "hendra"; 
    dpt.lastupdate = DateTime.Now; 

    Linq.departements.InsertOnSubmit(dpt); 
    Linq.SubmitChanges(); // error happen here, and could not catch it. 

    Response.Redirect("Departement.aspx"); 
} 
catch (ChangeConflictException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

的問題是,即使使用trycatch後,我仍然得到一個錯誤屏幕,當我輸入一個記錄,這已存在於數據庫中。如何解決它?有任何想法嗎?一些例子會很棒。

+0

解決你的問題,「//做一些調整」代碼。如果發生異常,它不會緩存回「catch」並處理它。 – 2013-05-01 13:49:51

+0

您收到的完全例外是什麼? – 2013-05-01 14:03:17

+0

你能告訴我們(1)整個例外,包括(2)整個方法(因爲在你的prev。例子中你有更多的catch-block,現在我只看到一個。) – 2013-05-01 14:07:14

回答

2

如果您嘗試在catch塊內再次提交更改,則可能會產生新的異常。你已經在catch塊,趕上新的例外。爲了捕獲新的異常,你必須在catch中定義一個新的try-catch。

編輯

由於問題已經改變了,如果抓不抓這裏面Linq.SubmitChanges()拋出的異常,比拋出的異常可能不是類型ChangeConflictException的。

+0

問題是,在這段代碼之後發生錯誤:Linq.departements.InsertOnSubmit (DPT); Linq.SubmitChanges(); – NomNomNom 2013-05-01 13:56:04

+0

然後這是發生的一個不同的異常,而不是你正在捕捉的異常 – 2013-05-01 13:59:03

+0

我編輯了我的帖子,把錯誤發生在哪裏,任何想法如何解決?順便說一句,我試圖使用catch普通異常,但它不工作。 – NomNomNom 2013-05-01 14:02:07

0

請嘗試下面提到的代碼它可以幫助你。

Context.SubmitChanges(Result => 
     { 

      if (Result.HasError) 
       { 
       CallBack(Result.Error.ToString()); 
       } 
      else 
       { 
       CallBack("Done"); 
       } 
     }, null); 
+0

這不會編譯:方法'SubmitChanges'沒有重載需要2個參數 – 2014-10-13 15:54:14

1

我仍然得到一個錯誤屏幕,當我進入已經存在於數據庫

所以首先檢查你的數據庫是否存在數據,如果存在更新舊數據的記錄,否則添加新數據。

try 
{ 
    // Check Database first with your primary key, lets assume your check returned a 
    // with dptcheck 

    var dptcheck = from d in Linq.departments 
        where d.YourPrimaryKey == YourValue 
        select d; 

    dpt = new departement(); 

    if (dptcheck.Any()) dpt = dptcheck.FirstOrDefault(); 

    dpt.departementcode = tbDepartementCode.Value; 
    dpt.departementname = tbDepartementName.Value; 
    dpt.createby = "hendra"; 
    dpt.createdate = DateTime.Now; 
    dpt.updateby = "hendra"; 
    dpt.lastupdate = DateTime.Now; 

    if (!dptcheck.Any()) Linq.departements.InsertOnSubmit(dpt); 
    // notice you only insert data if no old value found 
    Linq.SubmitChanges(); 

    Response.Redirect("Departement.aspx"); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
}