【问题标题】:Populating an ArrayList with MySQL data使用 MySQL 数据填充 ArrayList
【发布时间】:2014-08-30 21:20:31
【问题描述】:

我正在尝试使用数据库中的字段(“answer”和“answer_id”)填充两个 ArrayList(listOfAnswers 和 listOfAnswerIDs)。

当字符串 cmdText 中的 question_id=1 时,以下代码似乎可以正常工作。但是,如果我将其更改为 2 或 3,则 ArrayLists 仍然为空,我不知道为什么。有什么想法吗?

我认为这与字符串 cmdGetAnswersQuery 有关,因为 "SELECT * FROM answers WHERE question_id=2" 有效...

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

    ArrayList listOfAnswerIDs = new ArrayList();
    ArrayList listOfAnswers = new ArrayList();
    try
    {
        conn.Open();
        string cmdText = "SELECT * FROM questions_t WHERE question_id=2";
        MySqlCommand cmd = new MySqlCommand(cmdText, conn);
        cmd.Parameters.Add("@ModuleID", MySqlDbType.Int32);
        cmd.Parameters["@ModuleID"].Value = ddlModules.SelectedValue;

        reader = cmd.ExecuteReader();

        if (reader.Read())
        {
            lblQuestion.Text = reader["question"].ToString();
            ViewState["QuestionID"] = reader["question_id"].ToString();
            ViewState["AnswerID"] = reader["correct_answer_id"].ToString();

            reader.Close();

            string cmdGetAnswersQuery = "SELECT * FROM answers WHERE question_id=@QuestionID";
            MySqlCommand cmdGetAnswers = new MySqlCommand(cmdGetAnswersQuery, conn);
            cmdGetAnswers.Parameters.Add("@QuestionID", MySqlDbType.Int32);
            cmdGetAnswers.Parameters["@QuestionID"].Value = ViewState["AnswerID"];

            reader = cmdGetAnswers.ExecuteReader();

            while (reader.Read())
            {
                listOfAnswerIDs.Add(reader["answer_id"].ToString());
                listOfAnswers.Add(reader["answer"].ToString());
            }
            reader.Close();
            populateAnswers(listOfAnswers, listOfAnswerIDs);
        }
        else
        {
            reader.Close();
            lblError.Text = "(no questions found)";
        }
    }
    catch
    {
        lblError.Text = "Database connection error - failed to insert record.";
    }
    finally
    {
        conn.Close();
    }

实际的数据库内容如下所示: http://i.imgur.com/3S4lV60.png http://i.imgur.com/8A913xF.png

【问题讨论】:

  • 好吧,我不想问它,但是...有没有question_id=2question_id=3 的行?
  • @Jashaszun 是的 - imgur.com/8A913xF, imgur.com/3S4lV60
  • 2k14 年,我们仍在使用ArrayList 编码?
  • @MatíasFidemraizer 所以我用 List 替换了 ArrayList,但我仍然遇到同样的问题。
  • 这行代码看起来很可疑:cmdGetAnswers.Parameters["@QuestionID"].Value = ViewState["AnswerID"];。那不应该是ViewState["QuestionID"]吗?除非问题 ID 和答案 ID 相同。此外,您的第一个查询设置了一个从未在查询中使用的 ModuleID 参数。这是以前代码的产物,还是错误?

标签: c# mysql asp.net arraylist datareader


【解决方案1】:

我不能肯定这就是问题所在,但我首先要看的是这行代码:

cmdGetAnswers.Parameters["@QuestionID"].Value = ViewState["AnswerID"];

我怀疑你希望它是ViewState["QuestionID"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2020-03-05
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多