我知道为什么会收到此错误,但我不知道解决方法。
我已将数据库中的内容存储到列表中,以便可以将用户的答案与正确答案进行比较。
{
string mydbConnection = "datasource=localhost;port=3306;Initial Catalog=project;username=xxx;password=xxx;";
MySqlConnection connDB = new MySqlConnection(mydbConnection);
MySqlCommand cmdDataBase = new MySqlCommand("SELECT questions.answer FROM questions;", connDB);
MySqlDataReader DBReader;
connDB.Open();
DBReader = cmdDataBase.ExecuteReader();
while (DBReader.Read())
{
List<string> answers = new List<string>();
for (int i = 0; i < DBReader.FieldCount; i++)
answers.Add(DBReader.GetValue(i).ToString());
for (int i = 0; i < answers.Count; i++)
{
if (answers[i].Contains(textBoxQ1, textBoxQ2, textBoxQ3, textBoxQ4, textBoxQ5, textBoxQ6, textBoxQ7, textBoxQ8, textBoxQ9, textBoxQ10))
{
label1.Text = "Well done, Correct Answer";
}
else
{
label1.Text = "unlucky, wrong answer";
}
}
}
}
我收到错误消息:
方法 'Contains' 没有重载需要 10 个参数
我知道为什么我收到错误。我认为这是因为“包含”方法只能采用 1 个参数。但是我不知道如何解决这个问题。我的问题是如何通过代码进行修改以实现此目标?
编辑:
当您从数据库中检索问题时,您将为每个问题检索问题文本和问题 ID。
稍后,使用 questionID 获取该单个问题的正确答案。例如,当您有 questionid 42 的问题时,您可以通过以下方式获得该问题的正确答案
select answer from questions where questionID = 42;
现在在您的应用程序中执行以下操作:
对于用户输入的每个答案,从网格中检索 questionID。然后通过上面显示的语句从数据库中检索该问题的正确答案。然后将该答案与用户在相应文本框中输入的答案进行比较。
另一种选择是,在填充问题并将答案存储在 DataGridView 的隐藏列中时,您已经从数据库中获得了正确答案。然后您甚至不必再次去数据库检查答案,而只需将用户给出的答案与已经存储在 DataGridView 中的答案进行比较即可。
第二种方法的一些示例代码,不使用数据库,而是手动初始化数据网格。
private void Form1_Load(object sender, EventArgs e)
{
// Fill data grid
DataTable dataTable = new DataTable();
dataTable.Columns.Add("QuestionID");
dataTable.Columns.Add("Question");
dataTable.Columns.Add("Answer");
dataTable.Rows.Add(1, "5 + 4", "9");
dataTable.Rows.Add(2, "Capital of Germany", "Berlin");
dataTable.Rows.Add(23, "Angela ...", "Merkel");
dataTable.Rows.Add(42, "Capital of France", "Paris");
dataGridViewQuiz.DataSource = dataTable;
// Hide id and answer
dataGridViewQuiz.Columns["QuestionID"].Visible = false;
dataGridViewQuiz.Columns["Answer"].Visible = false;
}
// function to check an individual answer from a given TextBox
// against a given row in the datagrid.
private bool CheckAnswer(DataGridViewRow dataGridViewRow, TextBox textBox)
{
string correctAnswer = dataGridViewRow.Cells["Answer"].Value.ToString();
string givenAnswer = textBox.Text;
bool isCorrect = string.Equals(correctAnswer, givenAnswer, StringComparison.CurrentCultureIgnoreCase);
return isCorrect;
}
private void buttonCheck_Click(object sender, EventArgs e)
{
bool firstAnswerCorrect = CheckAnswer(dataGridViewQuiz.Rows[0], textBoxQ1);
bool secondAnswerCorrect = CheckAnswer(dataGridViewQuiz.Rows[1], textBoxQ2);
bool thirdAnswerCorrect = CheckAnswer(dataGridViewQuiz.Rows[2], textBoxQ3);
bool fourthAnswerCorrect = CheckAnswer(dataGridViewQuiz.Rows[3], textBoxQ4);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句