Мне нужно создать онлайн-тест с 10 вопросами. У меня есть 30 вопросов, хранящихся в базе данных, и каждый раз, когда тест начинается, 10 вопросов должны выбираться случайным образом. Мне удалось отобразить вопросы на этикетке, но я показываю их все. Какой код мне нужен, чтобы отображалось только 10 вопросов? Также там, поскольку есть ответы с несколькими вариантами ответов, мне нужно назначить каждый вариант ответа для переключателя. Ответы также хранятся в базе данных. Что я сделал до сих пор (я разместил только соответствующий код):
Код в классе DBConnection:
public static List<Questions> LoadQuestions()
{
List<Questions> quest = new List<Questions>();
OleDbConnection myConnection = GetConnection();
string myQuery = "SELECT * FROM Questions";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
try
{
myConnection.Open();
OleDbDataReader reader = myCommand.ExecuteReader();
while (reader.Read())
{
Questions q = new Questions(Int32.Parse(reader["ID"].ToString()),
reader["QuestionBody"].ToString(),
reader["CorrectAnswer"].ToString());
quest.Add(q);
}
return quest;
}
catch (Exception ex)
{
Console.WriteLine("Exception in DBHandler" + ex);
return null;
}
finally
{
myConnection.Close();
}
}
public static List<Answers> LoadAnswers()
{
List<Answers> answers = new List<Answers>();
OleDbConnection myConnection = GetConnection();
string myQuery = "SELECT * FROM Answers";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
try
{
myConnection.Open();
OleDbDataReader reader = myCommand.ExecuteReader();
while (reader.Read())
{
Answers a = new Answers(Int32.Parse(reader["ID"].ToString()),
reader["AnswerA"].ToString(),
reader["AnswerB"].ToString(),
reader["AnswerC"].ToString(),
(Int32.Parse(reader["QuestionId"].ToString())));
answers.Add(a);
}
return answers;
}
catch (Exception ex)
{
Console.WriteLine("Exception in DBHandler" + ex);
return null;
}
finally
{
myConnection.Close();
}
}
Код в Test.aspx
:
protected void Page_Load(object sender, EventArgs e)
{
List<Questions> QList = DatabaseConnecter.LoadQuestions();
Random rndNumber = new Random();
int randomQuest = rndNumber.Next(30);
lblQuest.Text = QList[randomQuest].QuestionBody;
List<Answers> AList = DatabaseConnecter.LoadAnswers();
int a = 30;
rbAnswer1.Text = AList[a].AnswerA;
}
Я получил следующую ошибку в строке списка
"Ссылка на объект не установлена для экземпляра объекта".
Метка (lbwQuest
) отображает вопросы просто отлично. Проблема с ответами и переключателями (rbAnswer1
, rbAnswer2
, rbAnswer3
). Кроме того, в базе данных у меня есть две таблицы - Вопросы со столбцами - ID, QuestionBody, CorrectAnswer и Ответы со столбцами - ID, QuestionID, AnswerA, AnswerB, AnswerC.