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

时间:2011-07-29 15:38:24

标签: c# .net mysql mono

如何将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())
            {

            }

4 个答案:

答案 0 :(得分:2)

public IList<Group> 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<Group> g = new List<Group>();

            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;
        }

答案 1 :(得分:1)

使用DataReader填充DataAdapter,而不是使用DataTable。您可以在结果DataTable中看到总行数。

var results = new DataTable();

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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