MySqlDataReader为表中的所有行返回相同的值

时间:2015-03-23 19:04:52

标签: c# mysql .net

我正在使用MySql和C#。 我有这段代码:

    public List<Student> selectStudent()
    {
        List<Student> stud = new List<Student>();
        Student st = new Student();
        MySqlConnection msConn = new MySqlConnection(connStr);
        MySqlDataReader msRdr = null; ;
        try
        {
            msConn.Open();
            MySqlCommand msComm = new MySqlCommand();

            msComm.Connection = msConn;
            msComm.CommandText = "SELECT * FROM Student";
            msRdr = msComm.ExecuteReader();
            while (msRdr.Read())
            {
                st.ID = msRdr.GetInt32(0);
                st.Name = msRdr.GetString(1);
                st.Address = msRdr.GetString(3);
                st.Birthdate = msRdr.GetDateTime(2);
                stud.Add(st);
            }
        }
        catch (MySqlException e) { }
        finally {
            msRdr.Close();
            msConn.Close(); };

        return stud;
    }

我的问题是,在数据表中,我有3行,例如 1 Jake Walker ......剩下的专栏 2 Raymond West ......剩下的专栏 3 Anne Marie Johnson ......剩下的专栏

但是当我把这个列表放入List然后将列表绑定到组合框时,我得到了下拉列表中所有3行的相同值,如果我打印列表的值,我只得到一个值。我得到的价值是第三个:已经烦人的安妮玛丽约翰逊。

1 个答案:

答案 0 :(得分:1)

您将继续覆盖在行

中分配的st个实例的属性
Student st = new Student();

不是在循环之外分配st,而是为每个循环迭代分配一个新的<{1}}

while (msRdr.Read())
{
    Student st = new Student();

    st.ID = msRdr.GetInt32(0);
    st.Name = msRdr.GetString(1);
    st.Address = msRdr.GetString(3);
    st.Birthdate = msRdr.GetDateTime(2);
    stud.Add(st);
}