C# 检查文本框文本是否与存储在列表中的数据库中的值相同
C# Checking textbox text is the same as values from database stored in the list
我知道为什么会出现此错误,但我不知道解决方法。
- 我正在尝试检查用户在文本框中输入的答案是否正确。
- 我会根据数据库中的答案检查答案。
我已经将数据库中的内容存储到一个列表中,这样我就可以将用户的答案与正确答案进行比较。
{
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";
}
}
}
}
我收到错误消息:
No overload for method 'Contains' takes 10 arguments
我知道为什么会收到错误消息。我想是因为方法 'contains' 只能接受 1 个参数。但是我不知道如何解决这个问题。我的问题是如何通过代码修改来实现这个objective?
编辑:
如果您想检查是否满足多个条件,您可以使用 and。
当您从数据库中检索问题时,您会为每个问题检索问题文本和问题 ID。
稍后,使用 questionID 获取该个别问题的正确答案。例如,当你有 questionid 42 的问题时,你可以通过
获得该问题的正确答案
select answer from questions where questionID = 42;
现在在您的应用程序中执行以下操作:
对于用户输入的每个答案,从网格中检索问题 ID。然后通过上面显示的语句从数据库中检索该问题的正确答案。然后将该答案与用户在相应文本框中输入的答案进行比较。
另一种选择是,当您填充问题并将答案存储在 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);
}
我知道为什么会出现此错误,但我不知道解决方法。
- 我正在尝试检查用户在文本框中输入的答案是否正确。
- 我会根据数据库中的答案检查答案。
我已经将数据库中的内容存储到一个列表中,这样我就可以将用户的答案与正确答案进行比较。
{ 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"; } } } }
我收到错误消息:
No overload for method 'Contains' takes 10 arguments
我知道为什么会收到错误消息。我想是因为方法 'contains' 只能接受 1 个参数。但是我不知道如何解决这个问题。我的问题是如何通过代码修改来实现这个objective?
编辑:
如果您想检查是否满足多个条件,您可以使用 and。
当您从数据库中检索问题时,您会为每个问题检索问题文本和问题 ID。
稍后,使用 questionID 获取该个别问题的正确答案。例如,当你有 questionid 42 的问题时,你可以通过
获得该问题的正确答案select answer from questions where questionID = 42;
现在在您的应用程序中执行以下操作:
对于用户输入的每个答案,从网格中检索问题 ID。然后通过上面显示的语句从数据库中检索该问题的正确答案。然后将该答案与用户在相应文本框中输入的答案进行比较。
另一种选择是,当您填充问题并将答案存储在 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);
}