2012-05-17 6 views
0

Я вытаскиваю 25 случайных чисел между диапазоном 1-35 вопросов, хранящимся в SQL, на основании идентификационного номера (1,2..20 и т. Д.), Так что пользователь, принимающий тест, будет получить заданные вопросы из пула вопросов в 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()) 

Это эффективно randomises вопросы, прежде чем принимать 35 из них. Таким образом, вы можете сделать все это в одном запросе, а не в 35 запросах.

+0

Так я и сделал бы это. Кроме того, если у пользователя есть возможность выполнить «тест» несколько раз, вы можете включить предложение where, чтобы пользователь всегда видел вопросы, о которых они никогда не спрашивали: select top 35 * from Question_Pool, где QuestionId не в (выберите QuestionId from Answers, где AnsweredByUserId = @ UserId) order by (newid()) – mellodev

+0

Большое спасибо, я попробую. Он отлично работает !! @Paul Stovell Еще раз спасибо. Сегодня я провел слишком много времени на этом. –

Смежные вопросы