C# 将数据更新到数据库中

C# 将数据更新到数据库中,c#,linq,datagridview,updating,C#,Linq,Datagridview,Updating,我在向数据库添加数据时遇到问题。我编写的代码只能更新shiftming_启动,而不能更新shiftming_停止。谁能帮我看看我的代码,看看哪里出了问题。非常感谢 private void btnUpdate_Click(object sender, EventArgs e) { using (testEntities Setupctx = new testEntities()) { var toBeUpdated = txtStart.Text; var toBeUpdat

我在向数据库添加数据时遇到问题。我编写的代码只能更新shiftming_启动,而不能更新shiftming_停止。谁能帮我看看我的代码,看看哪里出了问题。非常感谢

private void btnUpdate_Click(object sender, EventArgs e) {
  using (testEntities Setupctx = new testEntities()) {
    var toBeUpdated = txtStart.Text;
    var toBeUpdated1 = txtStop.Text;
    shifthour updateShift = new shifthour();
    updateShift = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdated);
    updateShift = Setupctx.shifthours.FirstOrDefault(p => p.shiftTiming_stop == toBeUpdated1);
    updateShift.shiftTiming_start = txtStart.Text;
    updateShift.shiftTiming_stop = txtStop.Text;
    Setupctx.SaveChanges();
    txtStart.Text = "";
    txtStop.Text = "";
    MessageBox.Show("Shift Timing Has Been Updated.");
  }
}

假设我正确地跟踪了您(我建议使用更有意义的变量名),请按如下方式更新代码:

private void btnUpdate_Click(object sender, EventArgs e) {
  using (testEntities Setupctx = new testEntities()) {
    var toBeUpdatedStart = txtStart.Text;
    var toBeUpdatedStop = txtStop.Text;
    shifthour updateStartShift;
    shifthour updateStopShift;
    updateStartShift = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart);
    updateStopShift = Setupctx.shifthours.FirstOrDefault(p => p.shiftTiming_stop == toBeUpdatedStop);
    if (updateStartShift != null)
    {
       updateStartShift.shiftTiming_start = txtStart.Text;
    }
    if (updateStopShift != null)
    {
        updateStopShift.shiftTiming_stop = txtStop.Text;
    }
    Setupctx.SaveChanges();
    txtStart.Text = "";
    txtStop.Text = "";
    MessageBox.Show("Shift Timing Has Been Updated.");
  }
}

请注意,
updateShift=Setupctx.shifthours.FirstOrDefault(u=>u.shiftming\u start==toBeUpdated)被后续类似行有效地丢弃,该行涉及
p
;这是您要更新的记录吗?u和p都是我要更新的记录。但是现在我只能更新'u'而不能更新'p'。你有没有在txtStop.text中添加一个断点进行检查?是的,我已经检查过了。数据不会更新数据库。如果我只更新开始时间,它可以被更新,但是如果我同时更新这两个时间,这两个时间都不能被更新。@Philemon不,现在你只更新
p
1;
u
一个被提取但被丢弃。我尝试了你的代码,编译时错误显示为“序列不包含元素”。这是他们突出显示的一行。“updateShiftStart=Setupctx.shifthours.Single(u=>u.shiftTiming_start==toBeUpdatedStart);”顺便说一句,文本框中已经有我从datagridview中选择的数据,不可能是空的,对吗?你能发布你正在使用的确切代码吗?我不确定“updateShiftStart=Setupctx.shifthours.Single(u=>u.shiftming_start==tobeupdatestart);”上怎么会有错误,因为我的建议中没有包括这一点。FirstOrDefault更安全,因为如果找不到匹配项,它将返回null。文本框值不太可能为null,但如果Setupctx中的shifthour没有任何匹配值,则updateStartShift可能为null。根据您描述的错误,Setupctx.shifthours是一个空列表,或者没有与您的条件匹配的元素。