2012-07-11 111 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