Ank
Ank

Reputation: 1

ASP.NET, Code on click of a next button

The following is my code, I am doing project on online examination in that I have a module of question to display in this when I click on next button it should go to the next question but it is not going.

    public partial class Student : System.Web.UI.Page
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);

        int i=1; 
        Session["Number"] = i;

    protected void Page_Load(object sender, EventArgs e)
    {

         Session["Number"] = i++;
         Label1.Text = Session["Number"].ToString();

            con.Open();
            SqlCommand cmd = new SqlCommand("Select * from Questions where QuestionNo = '"+Label1.Text+"'", con);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                Label2.Text = dr["Question"].ToString();
                Label3.Text = dr["Ans1"].ToString();
                Label4.Text = dr["Ans2"].ToString();
                Label5.Text = dr["Ans3"].ToString();
                Label6.Text = dr["Ans4"].ToString();
            }
            con.Close();

            con.Open();
            SqlCommand cmd1 = new SqlCommand("Select * from Answers where QuestionNo = '" + Label1.Text + "'", con);
            SqlDataReader dr1 = cmd1.ExecuteReader();
            if (dr1.Read())
            {
                Label8.Text = dr1["Answer"].ToString();
            }
            con.Close();   
    }
    protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton1.Checked)
        {
            Label7.Text = Label3.Text;
        }
    }
    protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton2.Checked)
        {
            Label7.Text = Label4.Text;
        }
    }
    protected void RadioButton3_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton3.Checked)
        {
            Label7.Text = Label5.Text;
        }
    }
    protected void RadioButton4_CheckedChanged(object sender, EventArgs e)
    {
        if (RadioButton4.Checked)
        {
            Label7.Text = Label6.Text;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Label7.Text == Label8.Text)
        {
            Label9.Text = "Your Answer is correct";
        }
        else
            Label9.Text = "Your Answer is incorrect";
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        i++;
        Session["Number"] = i;
        Response.Redirect("Student.aspx");

    }
}

Upvotes: 0

Views: 1490

Answers (2)

djluis
djluis

Reputation: 362

So many bad things in this code.

  1. You should always give names to your variables properly.
  2. Don't concatenate SQL queries because security reasons like SQL Injection
  3. You should use Session["Number"] to select the question number rather than Label1.Text.
  4. Use session when it was only necessary.

Upvotes: 1

Habib
Habib

Reputation: 223362

First thing that you are doing wrong is how you are trying to store value of i in your Session. You are overwriting it every time you get into the method and thus resulting in same question number on each button click.

Second, you should parametrized your queries.

On each button click you should retrieve the value of i from your session and then increment it and again store it in the session. like:

int i = 0;
if (Session["Number"] == null)
{
    Session["Number"] = i;
}
else
{
    i = Convert.ToInt32(Session["Number"]);
}
//Later To increment Session

Session["Number"] = ++i; //First increments, then assigns the value

You should also use ++i instead of i++ since that will store the value of i before increment.

Upvotes: 0

Related Questions