【问题标题】:C# Checking textbox text is the same as values from database stored in the listC#检查文本框文本与存储在列表中的数据库中的值相同
【发布时间】:2017-02-25 19:57:54
【问题描述】:

我知道为什么会收到此错误,但我不知道如何解决。

  1. 我正在尝试检查用户在文本框中输入的答案是否正确。
  2. 我将通过将答案与数据库中的答案进行核对来做到这一点。
  3. 我已将数据库中的内容存储到一个列表中,以便我可以将用户的答案与正确答案进行比较。

      {
        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";
                }
            }
        }
    }    
    

    我收到错误:

方法“包含”没有重载需要 10 个参数

我知道为什么会出现错误。我认为这是因为“包含”方法只能采用 1 个参数。但是我不知道如何解决这个问题。我的问题是如何通过代码修改来实现这个目标?

编辑:

【问题讨论】:

  • 您的首要任务是更改密码,因为现在每个人都知道密码是什么了。
  • 代码远非正确。想一想:每个输入都代表一个特定的问题。您需要检查用户给出的答案是否是特定问题的正确答案。你怎么知道textBoxQ1显示哪个问题,textBoxQ2显示哪个问题,等等?
  • 我有另一个函数,它从数据库中调用问题来填充用户可以查看的 datagridview。如果我能破解接听功能,我就能破解这个项目。是的,我仍然需要调整它。我被困在如何检查用户给出的答案是否是特定问题的正确答案。有什么建议吗?
  • 好吧,告诉我们你是如何填写问题的。这对于了解如何检查答案至关重要。
  • 我看不出它们是如何关联的。但是你去了,我用问题代码编辑了问题。

标签: c# mysql list contains


【解决方案1】:

当您从数据库中检索问题时,您会为每个问题检索问题文本和 questionID。

稍后,使用 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);
}

【讨论】:

  • 没有源代码答案,因为这显然是一个家庭作业项目,但试图解释要采取的步骤。如果有不清楚的地方,请询问,我可以给出更详细的答案。
  • 听起来不错!我会试一试,如果我需要进一步的帮助,我会回复你。谢谢。这也不是一个家庭作业项目,但不用担心我喜欢挑战。
  • 我了解您的代码的要点。但是,如果您的“checkAnswer”函数与数据网格中的答案相同,它是否会返回真/假?
  • 是的,它返回真或假取决于文本框中的答案是否与存储在datagridview行中的答案相同。
【解决方案2】:

如果您想检查是否满足多个条件,您可以使用 and。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2013-08-12
    • 2015-10-23
    • 2020-01-10
    相关资源
    最近更新 更多