我正在使用 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/