我刚刚完成了测验的添加部分,即管理员为客人添加问题的部分。
当我点击下一个按钮时,我只看到我添加的最后一个问题。这是代码:
SqlConnection con = new SqlConnection(@"Data Source=MARIA-PC;Initial Catalog=Account;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM [dbo].[QuestAdd] WHERE Class = '1'", con);
SqlDataReader reader = null;
reader = cmd.ExecuteReader();
while (reader.Read())
{
textBox2.Text = (reader["Question"].ToString());
textBox3.Text = (reader["R1"].ToString());
textBox4.Text = (reader["R2"].ToString());
textBox5.Text = (reader["R3"].ToString());
textBox6.Text = (reader["R4"].ToString());
if (textBox7.Text == (reader["R_correct"].ToString()))
point = point + 1;
}
con.Close();
我的问题是我不知道为什么我只看到表格中的最后一个问题,我有不止一个问题。
答案 0 :(得分:-1)
datareader循环遍历所有结果并覆盖查询中每行的文本框值。
在上面的代码中,每次运行此代码时,只会显示检索到的最后一行。
您可能更好地检索数据并存储在数据结构中并重新编码下一个按钮以使用它。
e.g。
//Set up datatable with all questions
DataTable dt=new DataTable();
dt.column.Add("Question",typeof(string));
dt.column.Add("R1",typeof(string));
dt.column.Add("R2",typeof(string));
dt.column.Add("R3",typeof(string));
dt.column.Add("R4",typeof(string));
dt.column.Add("R_correct",typeof(int));
SqlConnection con = new SqlConnection(@"Data Source=MARIA-PC;Initial Catalog=Account;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM [dbo].[QuestAdd] WHERE Class = '1'", con);
SqlDataReader reader = null;
reader = cmd.ExecuteReader();
while (reader.Read())
{
DataRow dr=dt.NewRow();
dr["Question"] = (reader["Question"].ToString());
dr["R1"] = (reader["R1"].ToString());
dr["R2"] = (reader["R2"].ToString());
dr["R3"] = (reader["R3"].ToString());
dr["R4"] = (reader["R4"].ToString());
dr["R_correct"] = (reader["R_correct"]);
dt.Rows.Add(dr);
}
con.Close();
我在这里使用了数据表,但您也可以轻松使用对象列表。 上面的代码只是将查询中的数据添加到数据表中,然后您可以在下一个按钮中编写更改行号的代码。
这只是一个艰难的开始,但它应该让你走上正确的轨道