下面是明日科技在线考试系统自动生成试题和核对试题答案源码
1:用order by id desc生成的试题顺序答题时选的正确答案与题库里的正确答案一致,也就是说生成单选题题号的顺序与核对单选题答案顺序一致。
2:用order by newid()生成的试题顺序答题时选的正确答案与题库里的正确答案不一致,也就是说生成单选题题号的顺序与核对单选题答案顺序不一致。
3:怎样才能实现从数据库中选择单选题和核对单选题答案都用order by newid()生成的试题顺序答题时选的正确答案与题库里的正确答案一致
//从数据库中选择单选题
            case 1:
                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();
                //生成单选题题号
                for (int tID1 = 1; tID1 <= DataList1.Items.Count; tID1++)
                {
                    Label lblSelect = (Label)DataList1.Items[tID1 - 1].FindControl("Label2");
                    lblSelect.Text = tID1.ToString() + "、";
                }
                break;

解决方案 »

  1.   

    由于帖子内容较多一次发不完,下面是计算单选题成绩和数据表字段
    //核对单选题答案
                case 2:
                    SqlDataAdapter myadapter2 = 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 myds2 = new DataSet();
                    myadapter2.Fill(myds2);
                    DataRow[] row1 = myds2.Tables[0].Select();
                    //计算单选题成
                    foreach (DataRow answer1 in row1)
                    {
                        int_row1 += 1;
                        if (int_row1<= 10)
                        {
                            RadioButtonList rbl = (RadioButtonList)(DataList1.Items[int_row1 - 1].FindControl("RadioButtonList1"));
                            if (rbl.SelectedValue == "")
                            {
                                this.lblSel.Text = int_row1Point.ToString();
                            }
                            else
                            {
                                float ti = DataList1.Items.Count;
                                if (answer1["que_answer"].ToString().Trim() == rbl.SelectedValue.ToString().Trim())
                                {
                                    int_row1Point += 50 / ti;
                                    this.lblSel.Text = int_row1Point.ToString();
                                }
                            }
                        }
                    }
                    Break
    数据库que_questions表的各个字段如下
    ; [id] 
    [que_subject] 
    [que_type]
    [que_joindate] 
    [que_lessonid] 
    [que_professionid]
    [que_taotiid] 
    [optionA] 
    [optionB] 
    [optionC]
    [optionD]
    [que_answer]
    [note]
      

  2.   

    order by newid()
    是随即抽取,每次都不一样的!
      

  3.   

    是不是批改试题?批改试题跟数据没毛关系啊,你 数据都读出来了,跟数据库没关系啊,直接datalist遍历啊
      

  4.   

    楼主case 1中的Sql语句包含case 2啊,把 相应代码提到switch语句外面,DataSet共用
    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)
      

  5.   

    我不想用order by id desc因为相邻客户端生成试题的顺序一样,如果用order by newid() 相邻客户端生成试题的顺序不一样,但生成单选题时读出顺序和计算单选题成绩读出题目的顺序不一样,对比答案时就会出错
      

  6.   

    把哪些代码提到switch语句外面,是不是id和qu_answer(题目号和正确答案),怎样提取?用session保存行吗?
      

  7.   

    中间有个转换的过程
    她选abcd,你要存5,6,78,9
    标准答案是存5还不是存a
    录入的时候,不要出现abcd,这个是自动生成的还有一个就是把标准答案作为字段存在答案选项上,这样你就只要获取ID即可
      

  8.   

    我已经把标准答案作为字段存在答案选项上,可是怎样获取ID?是用数组还是session?给写写代码好吗?
      

  9.   

    我用的是hiddenfield控件,答题时不显示答案,交卷后显示答案。在提交事件加上如下代码for (int i = 0; i < DataList1.Items.Count; i++)
            {
                ((Label)(DataList1.Items[i].FindControl("lblAnswer"))).Visible = true;
            }在前台datalist里面添加hiddenfield控件并绑定数据库<asp:Label ID="lblAnswer" runat="server" 
                                    Text='<%# "正确答案:"+DataBinder.Eval(Container.DataItem,"que_answer") %>' 
      

  10.   

    怎样获取hiddenfield的id.用lblAnswer时提示错误(没声明无法引用)