Мне нужно создать онлайн-тест с 10 вопросами. У меня есть 30 вопросов, хранящихся в базе данных, и каждый раз, когда запускается тест, нужно случайно выбрать 10 вопросов. Мне удалось отобразить вопросы на ярлыке, но я показываю их все. Какой код мне нужен, будет отображаться только 10 вопросов? Кроме того, поскольку есть ответы на множественный выбор, мне нужно назначить каждый вариант ответа на переключатель. Ответы также хранятся в базе данных. То, что я сделал до сих пор (я отправил соответствующий код только):Создание онлайн-теста с базой данных доступа в C#
код в классе 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
). Кроме того, в базе данных у меня есть две таблицы - Вопросы с столбцами - ИД, QuestionBody, CorrectAnswer и ответы с столбцами - ID, QuestionID, AnswerA, AnswerB, AnswerC.
«Я получил следующую ошибку в строке списка« Что вы подразумеваете под линией «список»? –
Жаль, что я не был определен. Я имел в виду последнюю строку. Это он: rbAnswer1.Text = AList [a] .AnswerA – user1135433
Список 'AList', возможно, не был создан. То, что именно должно быть возвращено 'DatabaseConnecter.LoadAnswers();'. Убедитесь, что он правильно возвращает то, что вы ожидаете. – Lion