我设计了一项学生调查来评估教师。该调查包括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");
}
,这是Q2问题中的代码
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");
}
}
请帮助,我怀疑插入/更新语句是导致这种情况的原因。
我也想提一下,每个问题都在一个单独的页面中,这就是我插入更新的原因。
修改
目前,我的数据库结构就像这样
调查表 Survey_ID(PK) 用户名(Fk) Student_ID(fK) Course_ID(FK) Q1 Q1_Comments Q2 Q2_Comments Q3 Q3_Comments Q4 Q4_Comments ......到Q20
学生表 Student_ID(PK) 姓 名字 用户名 密码
Course_student表 Student_ID(PK) Course_ID(PK) Instructor_ID(PK) Survey_ID(PK)
课程表 COURSE_ID Class_Title Instructor_Last Instructor_First 术语 SECTION_ID 课程编号
讲师表 Instructor_ID(PK) 姓 名字 用户名 密码
登录页面代码
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");
}
Q2页面
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");
}
请告诉我如何使用我的变量名正确编写。
答案 0 :(得分:0)
虽然它可能无法直接回答您的问题,但它可能会让您更好地组织您的数据库,在我看来,您需要更改数据库设计以容纳多个用户和多个问题以及各自的答案,以便您的表格看起来像这样
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);
}