2012-05-17 45 views
0

根据那里的ID号码(1,2..20等),我在存储在SQL中的1-35个问题的范围内拉出25个随机数,这样用户正在进行测试从SQL中的问题池中给出随机问题我试图让SQL参数在循环变量内增加“a”被用作将值输入到受尊重的数组中的键。从SQL数据库表中提取数据

示例代码下面

protected void Question_Fetch(int[] Mixed_Questions) 
    //this array is loaded with my mixed numbers between 1-35(no duplicates) the array length //is 25 
    { 
     Question_String_list = new string[25]; 
     Question_Answers = new string[25]; 
     Num_Answers = new string[25]; 
     Types_Of_Question = new string[25]; 
     User_Answers = new string[25]; 
     isLocked = new string[25]; 

     using (SqlCommand Comd = new SqlCommand("SELECT Question_String, Question_Answer, Type_Of_Question, Possible_Answers FROM Question_Pool WHERE Question_ID = @Question_ID", Conn)) 
     { 
      SqlParameter IDParam = Comd.Parameters.Add("@Question_ID", SqlDbType.Int); 
      for (int a = 0; a < Mixed_Questions.Length; a++) 
      { 
       int Random_Number = Mixed_Questions[a]; 
       Comd.Parameters.AddWithValue("@Question_ID", Random_Number); 
       Conn.Open();           
       SqlDataReader rdr = Comd.ExecuteReader(); 
       if (rdr.Read()) 
       { 
        IDParam = Mixed_Questions[a]; 
        //Random_Number = Mixed_Questions[a]; 
        //Comd.Parameters.AddWithValue("@Question_ID", Random_Number); 
        Question_String_list[a] = rdr.GetValue(0).ToString(); 
        Question_Answers[a] = rdr.GetValue(1).ToString(); 
        Types_Of_Question[a] = rdr.GetValue(2).ToString(); 
        Num_Answers[a] = rdr.GetValue(3).ToString(); 
        Conn.Close(); 
       } 
      } 
     } 
     Answer_Controls(); 
     Init_Test_Details(); 
    } 
+0

你真的使用传统的ASP吗?此外,为什么你使用平行数组而不是对象数组? –

+0

对不起,经典的asp标签是一个错误。 这仍然是在这个应用程序开发的早期,我是一个合作学生我会研究对象的数组只是看起来更容易,当我编写任何援助,你可以提供将不胜感激。 –

回答

2

一种更好的方式来拉35点随机的问题可能是做这样的事情:

select top 35 * from Question_Pool order by (newid()) 

他们取了35前这有效地randomises问题。这样,您可以在单个查询中完成所有操作,而不是35个查询。

+0

我也是这么做的。另外,如果用户有能力多次进行“测试”,则可能需要包含where子句以确保用户始终能够看到以前从未问过的问题:从Question_Pool中选择top 35 *,其中QuestionId不在(从Answers Answers中选择QuestionId(其中AnsweredByUserId = @ UserId)order by(newid()) – mellodev

+0

非常感谢你,我会试试这个。 它完美的作品! @Paul Stovell再次感谢你我今天在这方面花了太多时间。 –