如何从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); } }