Сравните ввод с данными в базе данных в формах c # - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь создать викторину в 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 голосов
/ 10 ноября 2018

Я предполагаю, что количество вопросов к вам в лучшем случае составляет 100 с, а не 1000000 + с. Таким образом, вместо того, чтобы обращаться к базе данных каждый раз, когда вы получаете ответ, вы должны взять весь идентификатор вопроса и его правильный ответ в самом начале и сохранить его в 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;
    }

А в ответ на полученное событие вы можете просто проверить поиск и обновить счет. Обращайтесь с тонкостями о проверке и проверке нуля и т. Д.

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

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

        lblScoreCounter.Text = scoreCounter.ToString();
    }
0 голосов
/ 10 ноября 2018

Если вы можете предоставить схему базы данных, это может помочь. Поскольку у вас есть ответ пользователя в памяти (не в БД), вам может не потребоваться присоединять его в качестве параметра к команде SQL. Вы должны иметь возможность просто вывести ответ на вопрос, который вам нужен (похоже, где questionID = 3), а затем сравнить InputAnswerTxt.Text с тем, что возвращает БД. Затем подсчитайте свои очки, если они равны друг другу.

Больше вашего кода мне нужно опубликовать (IE, где определены некоторые из этих переменных, схема БД и т. Д.), Чтобы дать дальнейшие рекомендации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...