求教 关于随机抽题的问题

a870317a 2011-06-07 10:35:03
SqlDataAdapter myadapter1 = new SqlDataAdapter("select * "
+ "from tb_Questions where que_type='单选题'and que_lessonid='"
+ dd1 + "'and que_taotiid='" + dd2 + "'order by id desc", con);
DataSet myds1 = new DataSet();
myadapter1.Fill(myds1);
DataList1.DataSource = myds1;
DataList1.DataBind();
怎样把这个改成随机抽取10道题目?
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a870317a 2011-06-08
  • 打赏
  • 举报
回复
public partial class QianUser_StartExamfra : System.Web.UI.Page
{
Datacon dataconn = new Datacon();
static int int_row1 = 0;//单选题题号索引
static int int_row2 = 0;//多选题题号索引
static int int_row1Point = 0;//单选题分数
static int int_row2Point = 0;//多选题分数
风骑士之怒 2011-06-08
  • 打赏
  • 举报
回复
DataList1.Items[int_row1 - 1] 这里提供的索引值大于你datalist1的元素值

int_row1赋值在哪里
a870317a 2011-06-08
  • 打赏
  • 举报
回复
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index

源错误:


行 110: if (int_row1<= 3)
行 111: {
行 112: RadioButtonList rbl = (RadioButtonList)(DataList1.Items[int_row1 - 1].FindControl("RadioButtonList1"));
行 113: if (rbl.SelectedValue == "")
行 114: {


这样的错误是怎么回事啊?
a870317a 2011-06-08
  • 打赏
  • 举报
回复
谁给个邮箱什么的 直接发过去给看看就好了!
a870317a 2011-06-07
  • 打赏
  • 举报
回复
SqlDataAdapter myadapter1 = new SqlDataAdapter("select top 10 * "
+ "from tb_Questions where que_type='单选题'and que_lessonid='"
+ dd1 + "'and que_taotiid='" + dd2 + "'order by newid()", con);
DataSet myds1 = new DataSet();
myadapter1.Fill(myds1);
DataList1.DataSource = myds1;
DataList1.DataBind();
这样是可以实现随机抽取题目了。。。
但是核对答案和统计分数又成问题了
//核对多选题答案
case 4:
SqlDataAdapter myadapter4 = new SqlDataAdapter("select id,que_answer"
+ " from tb_Questions where que_type='多选题'and que_lessonid="
+ dd1 + " and que_taotiid=" + dd2 + " order by id desc", con);
DataSet myds4 = new DataSet();
myadapter4.Fill(myds4);
DataRow[] row2 = myds4.Tables[0].Select();
//计算多选题成绩
foreach (DataRow answer2 in row2)
{
int_row2 += 1;
if (int_row2 <= 3)
{
CheckBoxList cbl = (CheckBoxList)(DataList2.Items[int_row2 - 1].FindControl("CheckBoxList1"));
if (cbl.SelectedValue == "")
{
lblDSel.Text = "0";
}
else
{
this.TextBox1.Text = "";
for (int q = 0; q < cbl.Items.Count; q++)
{
if (cbl.Items[q].Selected == true)
{
this.TextBox1.Text = TextBox1.Text.Trim() + cbl.Items[q].Value + ", ";
}
}
if (answer2["que_answer"].ToString().Trim() + "," == this.TextBox1.Text.Trim())
{
int_row2Point += 60 / DataList2.Items.Count;
this.lblDSel.Text = int_row2Point.ToString();
}
}
}
}
break;
}
}
kaihuan52 2011-06-07
  • 打赏
  • 举报
回复
用数据库中的newid() 语法如三楼所说的,非常简单
q107770540 2011-06-07
  • 打赏
  • 举报
回复
select top 10 * from tableA orderby newid()
porschev 2011-06-07
  • 打赏
  • 举报
回复

可以先取出所有题号放数组中

再随机取出10个题号
lpingz 2011-06-07
  • 打赏
  • 举报
回复
根据结果集的数量,去随即数。然后将得到的10随即数作为索引取到题目。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧