将数据从SQL数据库表读取到generics集合

我想从表中读取所有数据(包含3行)并将所有数据添加到generics集合中。从集合中我将绑定到gridview。

下面显示的代码有效,但最后一行在gridview中显示3次。可以帮助我。作为一个初学者

protected void Page_Load(object sender, EventArgs e) { List listid = new List(); Student stud = new Student(); SqlConnection con = new SqlConnection("........"); string sql = "select * from StudentInfo"; con.Open(); SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { stud.Studid = Convert.ToInt32(dr["StudId"]); stud.StudName = dr["StudName"].ToString(); stud.StudentDept = dr["StudentDept"].ToString(); listid.Add(stud); } GridView1.DataSource = listid; GridView1.DataBind(); } public class Student { private int studid; public int Studid { get { return studid; } set { studid = value; } } private string studName; public string StudName { get { return studName; } set { studName = value; } } private string studentDept; public string StudentDept { get { return studentDept; } set { studentDept = value; } } 

输出是这样的:

在此处输入图像描述

你需要在循环中实例化你的对象
否则,您将在集合中拥有相同的数据
所以代码应该是

 protected void Page_Load(object sender, EventArgs e) { List listid = new List(); SqlConnection con = new SqlConnection("........"); string sql = "select * from StudentInfo"; con.Open(); SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Student stud = new Student(); stud.Studid = Convert.ToInt32(dr["StudId"]); stud.StudName = dr["StudName"].ToString(); stud.StudentDept = dr["StudentDept"].ToString(); listid.Add(stud); } GridView1.DataSource = listid; GridView1.DataBind(); } 

同时使用数据阅读器或直接打开连接也不是一个好习惯
你应该使用using语句。

 using(SqlConnection con = new SqlConnection("connection string")) { con.Open(); using(SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection)) { using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader != null) { while (reader.Read()) { //do something } } } // reader closed and disposed up here } // command disposed here } //connection closed and disposed here 

在DataReader while循环中为数据库表中的每一行实例化一个新的Student:

 while (dr.Read()) { var stud = new Student(); stud.Studid = Convert.ToInt32(dr["StudId"]); stud.StudName = dr["StudName"].ToString(); stud.StudentDept = dr["StudentDept"].ToString(); listid.Add(stud); }