2012-07-11 28 views
0
private void btnUpdate_Click(object sender, EventArgs e) 
{ 
    using (testEntities Setupctx = new testEntities()) 
    { 

     var toBeUpdatedStart = txtStart.Text; 
     var toBeUpdatedStop = txtStop.Text; 
     shifthour updateShiftStart; 
     shifthour updateShiftStop; 
     updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart); 
     updateShiftStop = Setupctx.shifthours.FirstOrDefault(p => p.shiftTiming_stop == toBeUpdatedStop); 
     updateShiftStart.shiftTiming_start = txtStart.Text; <-- error prompt here 
     updateShiftStop.shiftTiming_stop = txtStop.Text; 
     Setupctx.SaveChanges(); 
     txtStart.Text = ""; 
     txtStop.Text = ""; 
     MessageBox.Show("Shift Timing Has Been Updated."); 
    } 
} 

嗨,任何人有任何想法這個代碼有什麼問題嗎? 更多信息: 這是編輯員工的班次時間。當我進入新的開始和停止時間時,出錯提示並說「對象引用未設置爲對象的實例」。C#更新查詢

回答

0

私人無效btnUpdate_Click(對象發件人,EventArgs的) { 使用(testEntities Setupctx =新testEntities()){ INT ID = Int32.Parse(lblID.Text); var SHquery =(從sh在Setupctx.shifthours 其中sh.idShiftHours == ID select sh).First();

   SHquery.shiftTiming_start = txtStart.Text; 
       SHquery.shiftTiming_stop = txtStop.Text; 
       Setupctx.SaveChanges(); 
       txtStart.Text = ""; 
       txtStop.Text = ""; 
       this.Edit_Shift_Hours_Load(null, EventArgs.Empty); 
       MessageBox.Show("Shift Timing Has Been Updated."); 
     } 
    } 
1

你的updateShiftStart爲空,這就是爲什麼你得到這個例外。由於您使用的是FirstOrDefault,它將返回第一個結果,如果沒有找到,則返回null,並且您的搜索沒有返回任何內容,這就是爲什麼updateShiftStart被指定爲null並因此爲異常的原因。您可以在使用該值之前進行檢查。

if(updateShiftStart != null) 
    { 
    updateShiftStart.shiftTiming_start = txtStart.Text; 
    } 

您的比較,(u => u.shiftTiming_start == toBeUpdatedStart);可能是。既然你是比較字符串,你可以使用

updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start.Equals(toBeUpdatedStart)); 

您可以使用StringComparison.InvariantCultureIgnoreCase中值爲

+0

Habib.OSU我試過你的方式,它提示我的消息,但並沒有改變我更新的時間。這是爲什麼? – Philemon 2012-07-11 07:52:03

+0

因爲它不在檢查中,這意味着您的對象仍然爲空。我不確定你的數據有什麼問題,但你的聲明FirstOrDefault正在返回你null – Habib 2012-07-11 07:53:45

0

updateShiftStart和updateShiftStop使用使用FirstOrDefault()查詢這可能會導致空引用設置的變量,忽略大小寫。

+0

有趣的是,你會像我一樣對我的答案發表評論,但回答完全一樣的東西。 – 2012-07-11 06:17:18

+0

我試着設置First而不是FirstOrDefault,但結果是一樣的。 – Philemon 2012-07-11 08:13:06

+0

@Ianannis Karadimas,我的歉意,我讀了你的回答錯誤。我以爲你說updateShiftStart最初是NULL,因此,第二行失敗。我的錯誤,我會刪除我的評論。 – Maarten 2012-07-11 11:34:38

0

updateShiftStart是空的,這意味着行

updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart); 

不能返回的對象。 FirstOrDefault將找到它的第一個項目,或者爲null。如果您的代碼絕對要求updateShiftStart不爲空,則應該在操作後檢查,或使用First代替。

+0

@Maarten肯定,但我猜你的Linq返回'null',這是有效的,因爲你使用'FirstOrDefault'。 – 2012-07-11 06:09:01

+0

我誤解了你的答案,我的歉意。 – Maarten 2012-07-11 11:35:02