将输入与数据库中的数据以C#形式进行比较

时间:2018-11-09 22:25:13

标签: c# database forms

我正在尝试使用表单和数据库在c#中创建测验。我目前正在努力将输入的文本与数据库中的正确答案进行比较。 例如:如果我在答案的文本框中输入“ A”,而数据库中存储的正确答案是“ A”,则会在分数上加一个。

我为此使用的代码(无效)如下:

SqlConnection con = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand("select Answer from Questions where QuestionID=3", con);
        cmd.Parameters.AddWithValue("@Answer", InputAnswerTxt.Text);

        con.Open();
        SqlDataAdapter adpt = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adpt.Fill(ds);
        using (SqlDataReader re = cmd.ExecuteReader())
        {
            if (re.Read())
            {
                string AnswerSelection = (string)re["Answer"];
                SetScore = SetScore++;

            }
            MessageBox.Show("Your score is : " + SetScore);

        }
        con.Close();

任何建议都是有帮助的!如果您需要更多了解代码的嵌入位置,请告诉我。

2 个答案:

答案 0 :(得分:0)

如果您可以提供数据库架构,则可能会有所帮助。由于您的答案在内存中(而不在DB中),因此您可能不需要将其作为参数附加到SQL命令。您应该能够将所需问题的答案(看起来像问题ID = 3)下拉出来,然后将InputAnswerTxt.Text与数据库返回的内容进行比较。如果它们彼此相等,那么就加分。

我需要发布更多代码(例如其中定义了一些变量的IE和DB模式等),以提供进一步的建议。

答案 1 :(得分:0)

我假设您的测验问题的数量最多为100而不是1000000 + s。因此,与其在每次收到答案时都去数据库,不如从一开始就抓住所有问题ID及其正确答案,并将其存储在dictionary中。然后检查字典的正确性并更新分数。

下面是一个粗略的准则,它不是一个完全有效的代码,但是应该可以给您一个足够好的主意,希望您可以在注释中提出。

因此,在您的constructor中,您可以打电话检索所有答案。如下所示:

    private Dictionary<string, string> _correctAnswerLookup;
    public Form1()
    {
        InitializeComponent();
        _correctAnswerLookup = GetCorrectAnswerByQuestionLookup();
    }

    private Dictionary<string, string> GetCorrectAnswerByQuestionLookup()
    {
        Dictionary<string, string> correctAnswerLookup = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand cmd = new SqlCommand("select QuestionId, Answer from Questions", connection);
            try
            {
                connection.Open();
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    string questionId = (string)reader["QuestionId"];
                    string answer = (string)reader["Answer"];
                    if (!correctAnswerLookup.ContainsKey(questionId))
                    {
                        correctAnswerLookup.Add(questionId, answer);
                    }
                }
            }
            catch (Exception e)
            {
                // your exception handling
            }
        }
        return correctAnswerLookup;
    }

在收到答案的事件上,您只需检查查询并更新分数即可。自己处理有关验证和null检查等的细微问题。

    private void OnAnswerSubmitted()
    {
        string currentQuestionId = ""; // however you get this in your UI.
        string selectedAnswer = "";

        if (_correctAnswerLookup[currentQuestionId] == selectedAnswer)
        {
            scoreCounter++;
        }

        lblScoreCounter.Text = scoreCounter.ToString();
    }