0

ID番号(1、2..20など)に基づいてSQLに格納されている1〜35の質問の範囲から25の乱数を取得しています。これは、テストを受けるユーザーにSQLの質問プールからランダムな質問が与えられるようにするためです。ループ内でSQLパラメーターをインクリメントしようとしています。変数「a」は、尊重される配列に値を入力するためのキーとして使用されています。

サンプルコードは以下のとおりです

    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();
    }
4

1 に答える 1

2

35 のランダムな質問を取得するより良い方法は、次のようにすることです。

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

これにより、35 の質問を受ける前に質問が効果的にランダム化されます。この方法では、35 のクエリではなく、1 つのクエリですべてを実行できます。

于 2012-05-17T19:02:04.487 に答える