日期:2014-05-18  浏览次数:20818 次

随机抽取SQL数据
我想把试题表里的试题显示到我的答题面板里,用newid()随机从试题库里抽取5到试题

点击 下一题 按钮 开始

[code=C#][/code]private void button3_Click(object sender, EventArgs e)
  {
  string str = "select top 5 * from choiceQuestions order by newid()";
  SqlConnection conn1 = new SqlConnection(connectString);
  conn1.Open();
  SqlCommand cmd1 =new SqlCommand(str, conn1);
  SqlDataReader dr1 = cmd1.ExecuteReader();
  if (dr1.Read())
  {
  richTextBox1.Text = dr1["stNr"].ToString();
  textBox1.Text = dr1["optionA"].ToString();
  textBox2.Text = dr1["optionB"].ToString();
  textBox3.Text = dr1["optionC"].ToString();
  textBox4.Text = dr1["optionD"].ToString();
  textBox5.Text = dr1["questionDifficulty"].ToString();
  }
  dr1.Close();
  conn1.Close();
  }

但是 这个下一题 按钮可以一直点 ~~ 可以超过5道题
我想的是 怎么判定 随机抽取5道后 使 button3.Enabled =false 或者 弹出对话框提醒

还有 怎么记录产生的试题, 因为 还有 上一题 按钮, 点击它的时候希望能返回 上一题

希望大家给点思路 最好的话希望能给点源代码演示~  

小弟纯新手,在这拜谢大家了

------解决方案--------------------
既然你的程序只是抽取一道题,跟“随机抽取5道题”有什么关系呢?如果只是这个目的,那么在查询数据库的时候去选择 top 5 的任何选择都是多余的,你选择 top 1 就可以了。当然你需要判断出题是否重复。

你的问题是在前端业务控制上出的问题,跟后台业务逻辑操作没有任何关系。在前端,你可以通过ViewState来记录总共出了几道题,据此判断是不是第5次出题,判断是不是需要将按钮的enabled设置为false,并且在button3_Click一开始先验证(就算你设置了enabled属性也要做验证)是否已经出够了5道题。但是这些都是前端程序的状态数据,跟后台业务逻辑没有关系。

看你的叙述问题逻辑,你的button3_Click到底是一次出五道题还是一次出一道题都自己搞不清楚,头脑比较糊涂。