如何从SQL查询生成List ?

如果我定义了DbCommand来执行类似的操作:

 SELECT Column1 FROM Table1 

生成返回记录的List的最佳方法是什么?

没有Linq等,因为我正在使用VS2005。

我想这就是你要找的东西。

 List columnData = new List(); using(SqlConnection connection = new SqlConnection("conn_string")) { connection.Open(); string query = "SELECT Column1 FROM Table1"; using(SqlCommand command = new SqlCommand(query, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { columnData.Add(reader.GetString(0)); } } } } 

没有测试,但这应该工作正常。

循环遍历项目并添加到集合。 您可以使用Add方法

 Listitems=new List(); using (var con= new SqlConnection("yourConnectionStringHere") { string qry="SELECT Column1 FROM Table1"; var cmd= new SqlCommand(qry, con); cmd.CommandType = CommandType.Text; con.Open(); using (SqlDataReader objReader = cmd.ExecuteReader()) { if (objReader.HasRows) { while (objReader.Read()) { //I would also check for DB.Null here before reading the value. string item= objReader.GetString(objReader.GetOrdinal("Column1")); items.Add(item); } } } } 

如果您想查询所有列

 List list_users = new List(); MySqlConnection cn = new MySqlConnection("connection"); MySqlCommand cm = new MySqlCommand("select * from users",cn); try { cn.Open(); MySqlDataReader dr = cm.ExecuteReader(); while (dr.Read()) { list_users.Add(new Users(dr)); } } catch { /* error */ } finally { cn.Close(); } 

用户的构造函数将执行所有“dr.GetString(i)”

返回的数据是字符串; 你可以转换为不同的数据类型:

 (from DataRow row in dataTable.Rows select row["columnName"].ToString()).ToList(); 

或者是嵌套列表(好吧,OP用于单个列,这适用于多列…):

  //Base list is a list of fields, ie a data record //Enclosing list is then a list of those records, ie the Result set List> ResultSet = new List>(); using (SqlConnection connection = new SqlConnection(connectionString)) { // Create the Command and Parameter objects. SqlCommand command = new SqlCommand(qString, connection); // Create and execute the DataReader.. connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { var rec = new List(); for (int i = 0; i < reader.FieldCount-1; i++) { rec.Add(reader.GetString(i)); } ResultSet.Add(rec); } }