System.NullReferenceException 未由用户代码处理

本文关键字:代码 处理 用户 NullReferenceException System | 更新日期: 2023-09-27 17:57:07

int item = (int)Session["item"];我的

代码中的这一行给了我一个NullReferenceException 但我不明白

这是我的代码

它是使用自适应算法的自适应测验代码,通过从包含权重(级别)和学生级别的问题的数据库中检索问题,因此将根据学生级别选择问题,并根据学生的答案发布下一个问题

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication2
{

    partial class completeTest : System.Web.UI.Page
    {
        int level = 0;
        SqlDataSource QuizDataSource = new SqlDataSource();
        SqlCommand SqlCmd1;
        SqlConnection cn;
        SqlDataReader dr;
        System.Web.UI.WebControls.RadioButton rb1=new RadioButton();
        System.Web.UI.WebControls.RadioButton rb2 = new RadioButton();
        System.Web.UI.WebControls.RadioButton rb3 = new RadioButton();
        System.Web.UI.WebControls.RadioButton rb4 = new RadioButton();
        int weight;

        protected void Page_Load(object sender, System.EventArgs e)
        {
            Session.Add("type", 1);
            int maxItem = 15;
            int item = (int)Session["item"];
            dynamic CID = Session["CourseID"].ToString();
            Session.Add("CourseID", CID);
            cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            cn.Open();
            SqlCommand SqlCmd = null;
            SqlCmd = new SqlCommand("SELECT [Studentlevel] FROM [Student-Course] WHERE StudentID=(' " + Session["UserName"].ToString() + " ') AND CourseID=( ' " + Session["CourseID"].ToString() + " ' )", cn);
            level =(int) SqlCmd.ExecuteScalar();
            Session.Add("level", level);
            cn.Close();
            if (!Page.IsPostBack)
            {
                if (level == 1)
                {
                    weight = 1;
                }
                else if (level == 2)
                {
                    weight = 21;
                }
                else if (level == 3)
                {
                    weight = 41;
                }
                else if (level == 4)
                {
                    weight = 61;
                }
                else if (level == 5)
                {
                    weight = 81;
                }
                Session.Add("weight", weight);
            }

            cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            cn.Open();
            SqlCommand SqlC = new SqlCommand("SELECT [flag] FROM [Question] WHERE weight=(' " + Session["weight"].ToString() + " ')and CourseID=( ' " + Session["CourseID"].ToString() + " ') and flag=('" + "false" + "')", cn);
            dr = SqlC.ExecuteReader();
            if (dr.HasRows == false)
            {
                SqlDataSource user = new SqlDataSource();
                user.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                user.UpdateCommand = ("Update [Question] set flag=@flag where weight=('" + Session["weight"].ToString() + " ') ");
                user.UpdateParameters.Add("flag", "false");
                int row1 = user.Update();
            }
            cn.Close();
            if (item < maxItem)
            {
                cn.Open();
                if (level == 1)
                {
                    SqlCmd1 = new SqlCommand("Select top 1 * from [Question] where weight=(' " + Session["weight"].ToString() + " ')  AND CourseID=( ' " + Session["CourseID"].ToString() + " ') and flag=('" + "false" + "') order  by newid()", cn);
                }
                else if (level == 2)
                {
                    SqlCmd1 = new SqlCommand("Select top 1 * from [Question] where weight=(' " + Session["weight"].ToString() + " ') AND CourseID=( ' " + Session["CourseID"].ToString() + " ' ) and flag=('" + "false" + "') order  by newid()", cn);
                }
                else if (level == 3)
                {
                    SqlCmd1 = new SqlCommand("Select top 1 * from [Question] where weight=(' " + Session["weight"].ToString() + " ') AND CourseID=( ' " + Session["CourseID"].ToString() + " ' ) and flag=('" + "false" + "') order  by newid()", cn);
                }
                else if (level == 4)
                {
                    SqlCmd1 = new SqlCommand("Select top 1 * from [Question] where weight=(' " + Session["weight"].ToString() + " ') AND CourseID=( ' " + Session["CourseID"].ToString() + " ' ) and flag=('" + "false" + "') order  by newid()", cn);
                }
                else if (level == 5)
                {
                    SqlCmd1 = new SqlCommand("Select top 1 * from [Question] where weight=(' " + Session["weight"].ToString() + " ')AND CourseID=( ' " + Session["CourseID"].ToString() + " ' ) and flag=('" + "false" + "') order  by newid()", cn);
                }
                else
                {
                    Response.Redirect("CompleteTest.aspx");
                }
                dr = SqlCmd1.ExecuteReader();
                while (dr.Read())
                {
                    CurrentDiff.Text = "The current question Difficulty is " + dr.GetInt32(8).ToString();
                    QText.Text = dr.GetString(1);
                   rb1.Text = dr.GetString(2);
                    rb2.Text = dr.GetString(3);
                    if (string.IsNullOrEmpty(dr["Choice3"].ToString()))
                    {
                        rb3.Visible = false;
                    }
                    else
                    {
                        rb3.Visible = true;
                        rb3.Text = dr.GetString(4);
                    }
                    if (string.IsNullOrEmpty(dr["Choice4"].ToString()))
                    {
                        rb4.Visible = false;
                    }
                    else
                    {
                        rb4.Visible = true;
                        rb4.Text = dr.GetString(5);
                    }

                    Session.Add("QID", dr.GetInt32(0));
                    Session.Add("Answer", dr.GetString(6));
                    Session.Add("Diff", dr.GetInt32(8));
                    Session.Add("SID", dr.GetInt32(10));
                }
                item += 1;
                Session.Add("item", item);
                L1.Text = "Question " + item.ToString();
            }
            else
            {
                Response.Redirect("result.aspx");
            }
            SqlDataSource userUpdate = new SqlDataSource();
            userUpdate.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            userUpdate.UpdateCommand = ("Update [Question] set flag=@flag where QuestionID=('" + Session["QID"].ToString() + " ') ");
            userUpdate.UpdateParameters.Add("flag", "true");
            int row = userUpdate.Update();
        }
        protected void NextButton_Click(object sender, System.EventArgs e)
        {
            weight = (int)Session["weight"];
            Answer a = new Answer();
            a.QuestionID = Session["QID"].ToString();
            a.CorrectAnswer = Session["Answer"].ToString();
            a.Difficulty = Session["Diff"].ToString();
            a.ChapterID = Session["SID"].ToString();
            if (rb1.Checked)
            {
                a.UserAnswer = rb1.Text;
            }
            else if (rb2.Checked)
            {
                a.UserAnswer = rb2.Text;
            }
            else if (rb3.Checked)
            {
                a.UserAnswer = rb3.Text;
            }
            else if (rb4.Checked)
            {
                a.UserAnswer = rb4.Text;
            }
            dynamic level = Session["level"].ToString();

            ArrayList al = new ArrayList();
            al = (ArrayList)Session["AnswerList"];
            al.Add(a);
            Session.Add("AnswerList", al);

            if (a.UserAnswer == a.CorrectAnswer)
            {
                weight += 2;
            }
            else if (a.UserAnswer != a.CorrectAnswer)
            {
                weight -= 1;
            }
            Session.Add("weight", weight);

            if (level == 1 & (weight > 20 | weight < 1))
            {
                Response.Redirect("Result.aspx");
            }
            else if (level == 2 & (weight > 40 | weight < 21))
            {
                Response.Redirect("Result.aspx");
            }
            else if (level == 3 & (weight > 60 | weight < 41))
            {
                Response.Redirect("Result.aspx");
            }
            else if (level == 4 & (weight > 80 | weight < 61))
            {
                Response.Redirect("Result.aspx");
            }
            else if (level == 5 & (weight > 100 | weight < 81))
            {
                Response.Redirect("Result.aspx");
            }
            rb1.Checked = false;
            rb2.Checked = false;
            rb3.Checked = false;
            rb4.Checked = false;
        }
        public completeTest()
        {
            Load += Page_Load;
        }
    }
}

System.NullReferenceException 未由用户代码处理

如果 "Item" 不在 Session 中(或为 null),则转换为 int 将导致 NullReferenceException。