更新C#的查询

时间:2012-07-11 05:58:44

标签: c# visual-studio linq datagridview

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.");
    }
}

嗨,有人知道这段代码有什么问题吗? 更多信息 : 这是编辑员工的轮班时间。当我输入新的开始和停止时间时,错误提示输出并说“对象引用未设置为对象的实例。”

4 个答案:

答案 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.");
        }
    }