2014-01-14 70 views
0

如果任何人都可以向我解釋什麼是錯誤的,我真的很感激它,因爲它沒有拋出異常,所以我不明白爲什麼它不更新記錄。Linq C#奮鬥與更新代碼

對不起,我應該說我想更新數據庫中的現有記錄,「CompName」被用作主鍵,這不是我的數據庫設計或應用程序,或者我會用int作爲id並用很多不同的方式編碼。

using (CompanyAndContactDataContext dc = new CompanyAndContactDataContext()) 
{     
    try { 
     Company c = (from datavalue in dc.Companies 
      where datavalue.CompanyName == CompName 
      select datavalue).First(); 

     c.CompanyName = txtEditCompanyName.Text; 
     c.CompanyEmailAddress = txtEditCompanyEmail.Text; 
     c.CompanyTelephoneNumber = txtEditCompanyTelephone.Text; 
     c.CompanyFaxNumber = txtEditCompanyFax.Text; 
     c.CompanyAddress1 = txtEditAddress1.Text; 
     c.CompanyAddress2 = txtEditAddress2.Text; 
     c.CompanyAddress3 = txtEditAddress3.Text; 
     c.CompanyAddress4 = txtEditAddress4.Text; 
     c.PostCode = txtEditPostcode.Text; 

     dc.SubmitChanges(); 
    } catch (Exception exep) { 

    } 
} 
+9

刪除try catch,你會看到它。 – Magnus

+0

哎呀對不起,我忘了在catch上添加一個消息框......讓我再看看它: – Sam

+8

*從不*有一個空的'catch'!至少記錄錯誤 - 在這種情況下它肯定會幫助你找到 – germi

回答

0

初步猜測,這可能是引發異常的First()調用。您可以將它設置爲FirstOrDefault,或者嘗試將ID傳遞給您的方法(使它們從下拉列表中選擇一個值或自動完成,然後獲取所選內容的Id)。這樣你可以確定這個代碼命中時你可以更新條目。 如果你傳遞一個ID的方法,你甚至可以用「單」或「的SingleOrDefault」

編輯:

說你輸入「MyCompany的」爲COMPNAME,而這並不在數據庫表中。如果你調用First(),它會拋出異常。如果你調用FirstOrDefault(),它會返回「c」爲空。

如果您調用「c.CompanyName」或任何其他點,它會返回一個異常。

在調用任何點方法之前,您需要檢查c是否爲null。

+0

Single OrDefault的作品,但我現在得到空值參考錯誤值試圖改變。 – Sam

+0

@Sam如果您給它一個主鍵或ID,則只使用SingleOrDefault。否則FirstOrDefault。您收到空引用錯誤,因爲默認值爲空。您需要添加一些代碼來檢查「c」是否爲空,向用戶返回一條消息,說明他們爲CompName輸入的內容不在數據庫中 –