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

标签 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 jack ·沃克 ...其余专栏 2 雷蒙德·韦斯特 ...其余专栏 3 安妮·玛丽·约翰逊 ...其余专栏

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

最佳答案

您不断覆盖您在该行中分配的一个 st 实例的属性

Student st = new Student();

不要在循环外部分配 st,而是为每次循环迭代分配一个新的

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);
}

关于c# - MySqlDataReader 为表中的所有行返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218350/

相关文章:

c# - 由于某种原因,我的递归函数跳过了调用自身

c# - 使用 HMACSHA 在 .NET Standard 2.0 中签署消息

javascript - 限制正则​​表达式中的字符长度

mysql - 从 ActiveRecord::Relation 获取 SQL 数组

c# - 如何使用 C# 在 xamarin android 中将字节数组转换为 pdf?

php - 如何在函数选择中使用IF和ELSE?

MySQL查询代码修复

c# - 悬停菜单项时更改背景颜色但无法在wpf中显示子菜单

.net - Elasticsearch.NET 故障转移似乎不排除死节点

python - .NET框架中使用的经过训练的 tensorflow 模型