如何将数据库查询结果转换为数组?

如何将MySQL查询中返回的结果转换为C#.Net / Mono中的数组

根据我的理解,您需要使用数组将包含的项目数来定义数组,但我知道DataReader不会告诉您返回了许多行。 那么如何定义一个数组呢?

到目前为止我有:

string sqlWhere; if ((name != None) && (name != "")) sqlWhere = "WHERE name LIKE '%"+name+"%'"; if ((company != None) && (company != "")) if (sqlWhere == "") sqlWhere = "WHERE company LIKE '%"+company+"%'"; else sqlWhere = sqlWhere + " AND company LIKE '%"+company+"%'"; if ((dateFrom != None) && (dateFrom != "") && (dateTo != None) && (dateTo != "")) if (sqlWhere == "") sqlWhere = "WHERE date(timestampIn) BETWEEN '"+dateFrom+"' AND '"+dateTo+"'"; else sqlWhere = sqlWhere + " AND date(timestampIn) BETWEEN '"+dateFrom+"' AND '"+dateTo+"'"; IDbCommand dbcmd = this.dbcon.CreateCommand(); dbcmd.CommandText = "SELECT * FROM visitors " + sqlWhere; MySqlDataReader Reader = dbcmd.ExecuteReader(); while (Reader.Read()) { } 

 public IList GetGroup() { Connection c = new Connection(); String connectionString = c.ConnectionName; OleDbConnection conn = new OleDbConnection(connectionString); OleDbCommand mycmd = conn.CreateCommand(); DataSet dspendingapps = new DataSet(); dspendingapps.Clear(); mycmd.CommandText = " select g.groupid,g.groupname from tbl_group g order by g.groupname "; conn.Open(); OleDbDataAdapter appreader = new OleDbDataAdapter(mycmd); appreader.Fill(dspendingapps); conn.Close(); IList g = new List(); foreach (DataRow drapp in dspendingapps.Tables[0].Rows) { Group gg = new Group(); gg.GroupId = Convert.ToInt16(drapp["groupid"]); gg.Name = drapp["groupname"].ToString(); g.Add(gg); } return g; } 

而不是使用DataReader ,使用DataAdapter来填充DataTable 。 您可以在生成的DataTable查看总行数。

 var results = new DataTable(); var adapter = new SqlDataAdapter(); adapter.SelectCommand = dbcmd; dapater.Fill(results); 

您可以使用List在此输入代码而不是数组来存储数据,其中T是您要存储的数据类型,例如string,int或您的自定义数据类型。 对于使用Arrays,我们需要在编译时指定长度,但是使用List我们可以存储数据而不必担心长度。

扩展@Deepansh Gupta的响应:您可以考虑创建一个自定义对象或结构,其内部数据字段对应于查询结果集中返回的列(即,每个对象对应一个数据行,对象中的每个数据变量对应于列数据)。 当您的代码遍历结果的每一行时,创建一个新的自定义对象并将其附加到您的列表中。