向数据库插入新记录会覆盖现有记录

本文关键字:记录 覆盖 数据库 插入 新记录 | 更新日期: 2023-09-27 18:03:45

我设计了一个学生调查来评价教师。调查包括20个问题。我想做的是让每个学生登录并将他们的答案记录到数据库中。我能够设计整个东西,然而,每次我进行调查时,新记录都会覆盖现有记录。我希望能够为每个学生的所有答案保存在一行中。

我真的时间很紧,如果你能帮助我,我将不胜感激。

下面是Q1页面上的代码

if (Session["USER_ID"] != null )
              {
                SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Student;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("insert into Survey (Q1,Q1_Comments) values (@Q1,@Q1_Comments)", con);
            cmd.Parameters.AddWithValue("Q1", radListQ1.SelectedValue);
            cmd.Parameters.AddWithValue("Q1_Comments", txtQ1Comments.Text);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Redirect("Q2.aspx");
        }      

这是第二题

中的代码
Protected void btnQ2Next_Click(object sender, EventArgs e)
    {
        if (Session["USER_ID"] != null)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Student;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("UPDATE Survey SET Q2 = @Q2, Q2_Comments = @Q2_Comments ", con);
            cmd.Parameters.AddWithValue("Q2", radListQ2.SelectedValue);
            cmd.Parameters.AddWithValue("Q2_Comments", txtQ2Comments.Text);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Redirect("Q3.aspx");
        }
    }

请帮忙,我怀疑插入/更新语句是造成的。

我还想提一下,每个问题都在一个单独的页面上,这就是我插入更新的原因。

编辑

目前,我的数据库结构是这样的

<

调查表/strong>Survey_ID (PK)用户名(颗)Student_ID(颗)Course_ID(颗)第一季度Q1_Comments第二季Q2_Comments第三季Q3_Comments第四季度Q4_Comments……Q20

学生表

Student_ID (PK)Last_NameFirst_Name用户名密码

<

Course_student表/strong>Student_ID (PK)Course_ID (PK)Instructor_ID (PK)Survey_ID (PK)

<

课程表/strong>Course_IDClass_TitleInstructor_LastInstructor_First术语Section_IDCourse_Number

<

教师表/strong>Instructor_ID (PK)Last_NameFirst_Name用户名密码

登录页面代码

 protected void btnLogin_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Student;Integrated Security=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("select s.Student_ID, c.Course_ID,s.First_Name, s.Last_Name, c.Class_Title, c.Course_ID, c.Instructor_Last, c.Instructor_First, c.Term, c.Section_ID, c.Course_Number,e.Instructor_ID from Student S Join Course_Student e ON (s.Student_ID = e.Student_ID) Join Course c ON(c.Course_ID = e.Course_ID) where UserName =@username and Password=@password", con);
        //SqlCommand cmd = new SqlCommand("select * from UserTable where UserName =@username and Password=@password", con);
        cmd.Parameters.AddWithValue("@username", txtUserName.Text);
        cmd.Parameters.AddWithValue("@password", txtPassword.Text);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            Session["USER_ID"] = dt;
            Response.Redirect("Successful_Login.aspx");
        }    

Successful_Login.aspx

public partial class Successful_Login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt = (DataTable)Session["USER_ID"];
        lblName.Text = dt.Rows[0][0].ToString() + " " + dt.Rows[0][1].ToString();//your cloumn name;
        DataTable dt2 = (DataTable)Session["USER_ID"];
        GridView1.DataSource = dt2;
        GridView1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session.Remove("USER_ID");
        Session.RemoveAll();
        Session["USER_ID"] = null;
        Response.Redirect("Loggedout.aspx");
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string instructorName = GridView1.SelectedRow.Cells[5].Text + ", " + GridView1.SelectedRow.Cells[4].Text;
        string courseSession= GridView1.SelectedRow.Cells[1].Text + "-" + GridView1.SelectedRow.Cells[2].Text;
        string term = GridView1.SelectedRow.Cells[8].Text;
        string studentID = GridView1.SelectedRow.Cells[10].Text;
        string CourseID = GridView1.SelectedRow.Cells[11].Text;
        Session["USER_ID1"] = instructorName;
        Session["USER_ID2"] = courseSession;
        Session["USER_ID3"] = term;
        Session["USER_ID4"] = studentID;
        Session["USER_ID5"] = CourseID;

        Response.Redirect("Q1.aspx");
    }

Q1页

if (Session["USER_ID"] != null )
          {
            SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Student;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("insert into Survey (Q1,Q1_Comments) values (@Q1,@Q1_Comments)", con);
        cmd.Parameters.AddWithValue("Q1", radListQ1.SelectedValue);
        cmd.Parameters.AddWithValue("Q1_Comments", txtQ1Comments.Text);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        Response.Redirect("Q2.aspx");
    }      

第二页

if (Session["USER_ID"] != null )
          {
            SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Student;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("insert into Survey (Q1,Q1_Comments) values (@Q1,@Q1_Comments)", con);
        cmd.Parameters.AddWithValue("Q1", radListQ1.SelectedValue);
        cmd.Parameters.AddWithValue("Q1_Comments", txtQ1Comments.Text);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        Response.Redirect("Q2.aspx");
    }      

你能告诉我如何正确地使用我的变量名吗

向数据库插入新记录会覆盖现有记录

虽然它可能不会直接回答你的问题,但它可能会导致你更好地组织你的数据库,在我看来,你需要改变你的数据库设计,以适应多个用户和多个问题与各自的答案,所以你的表应该看起来像这样

Table Users
-----------
UserId (PK)
FirstName
LastName
...
Table Questions
---------------
QuestionId (PK)
QuestionText
...
Table Answers
-------------
AnswerId (PK, Autonumber)
UserId      - Unique constraint
QuestionId  - Unique constraint
Answer
...

有了这样的结构,你就可以这样做了:

if (Session["USER_ID"] != null )
              {
                SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Student;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("insert into Answers (UserId, QuestionId, Answer) values (@p1, @p2, @p3)", con);
            cmd.Parameters.AddWithValue("p1", Session["USER_ID"]);
            cmd.Parameters.AddWithValue("p2", radListQ1.SelectedValue); //reference question_id field here
            cmd.Parameters.AddWithValue("p3", txtQ1Comments.Text); // reference answer field here
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Redirect("Survey.aspx?Q=" + NextQuestionId);
        }