title: Null Reference Exception when Clicking a button in ASP.NET Webforms
body: <p>I have created a web application for online testing.</p>
  
  <p>The website is running perfectly fine on my local machine but giving an error on remote server.</p>
  
  <pre><code>protected void Page_Load(object sender, EventArgs e)
  {
  
              arrSessionALL_questions = Session["arrALL_questions"] as int[];
              arrSessionQuestion_ID = Session["arrayOfQuestionID"] as int[];
              arrSessionCorrectAns = Session["arrayOfCorrectAns"] as string[];
              arrSessionCorrectAnsMarks = Session["arrayOfCorrectAnsMarks"] as int[];
              arrSessionAns_ID = Session["arrayOfAnsID"] as string[];
              arrSessionAttempted_ID = Session["arrayOfAttemptedID"] as int[];
              arrSessionMarkQuestion_ID = Session["arrMarkQuestion_ID"] as int[];
              arrSessionLeft_ID = Session["arrayOfLeftID"] as int[];
              arrSessionTotalMarks = Session["arrTotalMarks"] as int[];
  }
  
  protected void ButtonNext_Click(object sender, EventArgs e)
  {
  
  
      PanelTimer.Visible = true;
      PanelQuestNum.Visible = false;
  
      try
      {       
  
      if (arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] != 0)
      {
  
  
          if (Convert.ToInt32(Session["QuestionCounter"]) &lt; arrSessionALL_questions.Length)
          {
              //Session["QuestionCounter"] = Convert.ToInt32(Session["QuestionCounter"]) + 1;
              LabelStudentName.Text = arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])].ToString();
              correctAns = arrSessionCorrectAns[Convert.ToInt32(Session["QuestionCounter"])].ToString();
              correctMarks = Convert.ToInt32(arrSessionCorrectAnsMarks[Convert.ToInt32(Session["QuestionCounter"])]);
              PanelQ.Visible = true;
              ButtonSTART.Visible = false;
              ButtonMark.Visible = true;
  
  
              PanelTimer.Visible = true;
              PanelQuestNum.Visible = false;
  
  
              if (RadioButtonListAns.SelectedIndex &gt;= 0)
              {
  
                  arrAns_ID[Convert.ToInt32(Session["QuestionCounter"])] = RadioButtonListAns.SelectedItem.ToString();
                  Session["arrayOfAnsID"] = arrAns_ID;
                  arrSessionAns_ID = Session["arrayOfAnsID"] as string[];
  
  
                  if (arrSessionAns_ID[Convert.ToInt32(Session["QuestionCounter"])] == correctAns)
                  {
                      studentMarks = correctMarks;
                      attempt_correct_wrong = "correct";
                  }
                  else
                  {
                      studentMarks = 0;
                      attempt_correct_wrong = "wrong";
                  }
  
  
                  con.Open();
                  SqlDataAdapter adp = new SqlDataAdapter("select * from Student_Analysis where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND QuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con);
                  DataSet ds = new DataSet();
                  adp.Fill(ds, "Student_Analysis");
                  int count = ds.Tables[0].Rows.Count;
                  if (count &gt; 0)
                  {
                      con.Close();
  
                      con1.Open();
                      SqlCommand cmd = new SqlCommand("UPDATE Student_Analysis set studentAns='" + arrSessionAns_ID[Convert.ToInt32(Session["QuestionCounter"])] + "',studentMarks='" + studentMarks + "',attemp_correct_wrong='" + attempt_correct_wrong + "' where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND QuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con1);
                      cmd.ExecuteNonQuery();
                      con1.Close();
                  }
                  else
                  {
  
                      con.Close();
  
                      con1.Open();
                      SqlCommand cmd = new SqlCommand("insert into Student_Analysis values('" + date + "','" + studentId.ToString() + "','" + studentName + "','" + username.ToString() + "','" + papername + "','" + Convert.ToInt32(LabelStudentName.Text) + "','" + arrSessionAns_ID[Convert.ToInt32(Session["QuestionCounter"])] + "','" + correctAns + "','" + studentMarks + "','" + correctMarks + "','" + attempt_correct_wrong + "')", con1);
                      cmd.ExecuteNonQuery();
                      con1.Close();
                  }
  
  }
  
              else
              {
                  arrAns_ID[Convert.ToInt32(Session["QuestionCounter"])] = "NULL";
                  Session["arrayOfAnsID"] = arrAns_ID;
                  arrSessionAns_ID = Session["arrayOfAnsID"] as string[];
  
  
                  studentMarks = 0;
                  attempt_correct_wrong = "Not attempted";
  
  
  
                  con.Open();
                  SqlDataAdapter adp = new SqlDataAdapter("select * from Student_Analysis where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND QuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con);
                  DataSet ds = new DataSet();
                  adp.Fill(ds, "Student_Analysis");
                  int count = ds.Tables[0].Rows.Count;
                  if (count &gt; 0)
                  {
                      con.Close();
  
                      con1.Open();
                      SqlCommand cmd = new SqlCommand("UPDATE Student_Analysis set studentAns='" + "NULL" + "',studentMarks='" + studentMarks + "',attemp_correct_wrong='" + attempt_correct_wrong + "' where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND QuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con1);
                      cmd.ExecuteNonQuery();
                      con1.Close();
                  }
                  else
                  {
  
                      con.Close();
  
                      con1.Open();
                      SqlCommand cmd = new SqlCommand("insert into Student_Analysis values('" + date + "','" + studentId.ToString() + "','" + studentName + "','" + username.ToString() + "','" + papername + "','" + Convert.ToInt32(LabelStudentName.Text) + "','" + "NULL" + "','" + correctAns + "','" + studentMarks + "','" + correctMarks + "','" + attempt_correct_wrong + "')", con1);
                      cmd.ExecuteNonQuery();
                      con1.Close();
                  }
              }
  
  
              if (Convert.ToInt32(Session["QuestionCounter"]) &lt; arrSessionALL_questions.Length - 1)
              {
                  Session["QuestionCounter"] = Convert.ToInt32(Session["QuestionCounter"]) + 1;
                  loadQuestion();
                  ButtonMark.Visible = true;
  
  
                  //Checking if question has been marked
                  con.Open();
                  SqlDataAdapter adp = new SqlDataAdapter("select * from StudentMarkedQuestions where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND markedQuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con);
                  DataSet ds = new DataSet();
                  adp.Fill(ds, "Student_Analysis");
                  int count = ds.Tables[0].Rows.Count;
                  if (count &gt; 0)
                  {
                      ButtonMark.Visible = false;
                      ButtonUnMark.Visible = true;
  
  }
  
                  else
                  {
                      ButtonMark.Visible = true;
                      ButtonUnMark.Visible = false;
                  }
                  //Checking if question has been marked
              }
              else
              {
                  LabelStudentName.Text = "End of questions!!";
                  PanelQ.Visible = true;
                  ButtonSTART.Visible = false;
                  ButtonFinish.Visible = true;
                  ButtonNext.Visible = true;
                  ButtonPrevious.Visible = true;
  
              }
  
  
          }
          else
          {
              LabelStudentName.Text = "End of questions!!";
              PanelQ.Visible = true;
              ButtonSTART.Visible = false;
  
              ButtonFinish.Visible = true;
              ButtonMark.Visible = false;
              ButtonPrevious.Visible = false;
              ButtonNext.Visible = false;
              ButtonUnMark.Visible = false;
  
          }
      }
  
  
      }   //try ends     
      catch(Exception ex)
      {
  
         Response.Write(ex.Message);          
      }
  }
  
  public void loadQuestion()
  {
      if (arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] != 0)
      {
  
  
          con1.Open();
          SqlDataAdapter adp1 = new SqlDataAdapter("select * from QuestionInsert where(QuestionNum='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "')", con1);
          DataSet ds1 = new DataSet();
          adp1.Fill(ds1);
          LabelQuestion.Text = (Convert.ToInt32(Session["QuestionCounter"]) + 1) + ".  " + ds1.Tables[0].Rows[0][7].ToString();
          con1.Close();
  
  
          RadioButtonListAns.Items.Clear();
          con2.Open();
          string strQuery = "select * from QuestionInsert where(QuestionNum='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "')";
          SqlDataAdapter da = new SqlDataAdapter(strQuery, con2);
          DataTable dt = new DataTable();
          da.Fill(dt);
          con2.Close();
          RadioButtonListAns.Items.Insert(0, new ListItem(dt.Rows[0]["Option1"].ToString(), dt.Rows[0]["Option1"].ToString()));
          RadioButtonListAns.Items.Insert(1, new ListItem(dt.Rows[0]["Option2"].ToString(), dt.Rows[0]["Option2"].ToString()));
          RadioButtonListAns.Items.Insert(2, new ListItem(dt.Rows[0]["Option3"].ToString(), dt.Rows[0]["Option3"].ToString()));
          RadioButtonListAns.Items.Insert(3, new ListItem(dt.Rows[0]["Option4"].ToString(), dt.Rows[0]["Option4"].ToString()));
          RadioButtonListAns.Items.Insert(4, new ListItem(dt.Rows[0]["Option5"].ToString(), dt.Rows[0]["Option5"].ToString()));
  
  
  
          //Selects radiobutton if answer found in database
          con3.Open();
          SqlDataAdapter adp = new SqlDataAdapter("select * from Student_Analysis where((date='" + date + "' AND username='" + username + "') AND (PaperName='" + papername + "' AND QuestionNumber='" + arrSessionQuestion_ID[Convert.ToInt32(Session["QuestionCounter"])] + "'))", con3);
          DataSet ds = new DataSet();
          adp.Fill(ds, "Student_Analysis");
          int count = ds.Tables[0].Rows.Count;
          if (count &gt; 0)
          {
              con3.Close();
  
              string ans = ds.Tables[0].Rows[0][6].ToString();
              if (RadioButtonListAns.Items.FindByText(ans) != null)
              {
                  RadioButtonListAns.Items.FindByText(ans).Selected = true;
              }
          }
          con3.Close();
          //Selects radiobutton if answer found in database
      }
  
  }
  </code></pre>
  
  <p>This is the code that I have applied, I have given the code from Page Load and ButtonNext_Click() event.</p>
  
  <p>While starting the test, it loads two questions but then if you will click on next button again, it is giving me this error:</p>
  
  <pre><code> [NullReferenceException: Object reference not set to an instance of an object.]
         StudentTestingPage.ButtonNext_Click(Object sender, EventArgs e) +2018
         System.EventHandler.Invoke(Object sender, EventArgs e) +0
         System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9553178
         System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
         System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
         System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
         System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
         System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
  </code></pre>
  
  <p>I tried everything that I know and searched about everything on internet but still unable to fix it.
  I have checked all the variables and arrays that can be set to null, the code is running fine on local machine.
  I have used SQL Server as database.</p>