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.");
}
}
嗨,有人知道这段代码有什么问题吗? 更多信息 : 这是编辑员工的轮班时间。当我输入新的开始和停止时间时,错误提示输出并说“对象引用未设置为对象的实例。”
答案 0 :(得分: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
忽略Equals中的案例
答案 1 :(得分:0)
使用FirstOrDefault()查询设置变量updateShiftStart和updateShiftStop,这可能导致NULL引用。
答案 2 :(得分:0)
updateShiftStart
为null,表示行
updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart);
无法返回对象。 FirstOrDefault
会找到它可以的第一个项目,或者为null。如果您的代码绝对要求updateShiftStart
不为空,则应在操作后进行检查,或使用First
代替。
答案 3 :(得分:0)
private void btnUpdate_Click(object sender,EventArgs e) { 使用(testEntities Setupctx = new testEntities()) { int ID = Int32.Parse(lblID.Text); var SHquery =(来自于Setupctx.shifthours中的sh 其中sh.idShiftHours == ID 选择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.");
}
}