简体   繁体   English

C#-使用数据库中的数据填充列表

[英]C# - Populating a List with data from a database

I have a List (listOfQuestionIDs) stored in ViewState of 10 different numbers and an int counter (questionCounter) stored in ViewState which I intend to use to access the different numbers in the first list. 我有一个存储在ViewState中的列表(listOfQuestionIDs),它包含10个不同的数字,还有一个int计数器(questionCounter)存储在ViewState中,我打算用它来访问第一个列表中的不同数字。

However, as I increment the value of ViewState["questionCounter"] by 1 the contents of listOfAnswerIDs and listOfAnswers remain exactly the same in the code below. 但是,当我将ViewState [“ questionCounter”]的值增加1时,listOfAnswerIDs和listOfAnswers的内容在下面的代码中保持完全相同。 Why is this? 为什么是这样?

protected void getAnswers()
{
    string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
    MySqlConnection conn = new MySqlConnection(connStr);
    MySqlDataReader reader;

    List<int> listOfQuestionIDs = (List<int>)(ViewState["listOfQuestionIDs"]);
    int questionCounter = Convert.ToInt32(ViewState["questionCounter"]);

    List<string> listOfAnswerIDs = new List<string>();
    List<string> listOfAnswers = new List<string>();
    List<string> listOfCorrectAnswerIDs = new List<string>();

    try
    {
        conn.Open();

        string cmdText = "SELECT * FROM answers WHERE question_id=@QuestionID";
        MySqlCommand cmd = new MySqlCommand(cmdText, conn);
        cmd.Parameters.Add("@QuestionID", MySqlDbType.Int32);
        cmd.Parameters["@QuestionID"].Value = Convert.ToInt32(listOfQuestionIDs[questionCounter]);

        reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            listOfAnswerIDs.Add(reader["answer_id"].ToString());
            listOfAnswers.Add(reader["answer"].ToString());

            if (reader["correct"].ToString().Equals("Y"))
            {
                listOfCorrectAnswerIDs.Add(reader["answer_id"].ToString());
            }
        }

        for (int i = 0; i < listOfAnswerIDs.Count; i++)
        {
            lblTitle.Text += listOfAnswerIDs[i].ToString();
        }

        reader.Close();

        populateAnswers(listOfAnswerIDs.Count, listOfAnswers, listOfAnswerIDs);
    }
    catch
    {
        lblError.Text = "Database connection error - failed to read records.";
    }
    finally
    {
        conn.Close();
    }

    ViewState["listOfQuestionIDs"] = listOfQuestionIDs;
    ViewState["listOfCorrectAnswerIDs"] = listOfCorrectAnswerIDs;
}

Here's where I increment the questionCounter: 这是我增加问题计数器的地方:

protected void btnNext_Click(object sender, EventArgs e)
{
    .........
    getNextQuestion();
}

protected void getNextQuestion()
{
    int questionCounter = Convert.ToInt32(ViewState["QuestionCounter"]);
    ..........
    getAnswers();
    ................
    questionCounter += 1;
    ViewState["QuestionCounter"] = questionCounter;
}

ViewState keys are case sensitive. ViewState键区分大小写。 In getAnswers() you use "questionCounter" and in getNextQuestion() you use "QuestionCounter". 在getAnswers()中使用“ questionCounter”,在getNextQuestion()中使用“ QuestionCounter”。 Pick one and keep it consistent. 选择一个并保持一致。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM