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

こんにちは、誰かがこのコードの何が問題になっているのか分かりますか?詳細:これは、スタッフのシフト時間を編集するためのものです。新しい開始時刻と停止時刻を入力すると、エラープロンプトが表示され、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。

4

4 に答える 4

1

あなたupdateShiftStartはnullであるため、この例外が発生します。使用し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.InvariantCultureIgnoreCaseEqualsの大文字小文字を無視するために使用できます

于 2012-07-11T06:00:45.063 に答える
0

変数updateShiftStartおよびupdateShiftStopは、FirstOrDefault()を使用したクエリを使用して設定されるため、参照がNULLになる可能性があります。

于 2012-07-11T06:02:26.167 に答える
0

updateShiftStartnullは、行を意味します

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

オブジェクトを返すことができません。FirstOrDefault可能な最初のアイテム、またはnullを検索します。コードでそれupdateShiftStartがnullでないことが絶対に必要な場合は、操作後に確認するか、First代わりに使用する必要があります。

于 2012-07-11T06:03:11.957 に答える
0

private void btnUpdate_Click(object sender、EventArgs e){using(testEntities Setupctx = new testEntities()){int ID = Int32.Parse(lblID.Text); var SHquery =(Setupctx.shifthoursのshから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.");
        }
    }
于 2012-07-17T01:48:23.690 に答える