2011-07-29 131 views
1

我怎么会在一个MySQL查询返回的结果转换为数组在C#.net /单声道如何将数据库查询结果转换为数组?

据我了解,你需要与项目阵列将持有的数量定义数组,但据我所知,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()) 
      { 

      } 
+6

用上面的代码,你已经开放给SQL注入 - 这是一个严重的安全问题! – Yahia

+0

为什么你想要一个数组?创建一个几乎总是一个坏主意。如果需要,可以将数据采集器直接绑定到网格。 –

回答

1

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

var results = new DataTable(); 

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

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

1

在@Deepansh上进行扩展Gupta的回应:您可能会考虑创建一个自定义对象或结构,其内部数据字段与查询结果集中返回的列相对应(即每个对象对应一个数据行,对象对应于列状数据)。随着代码遍历每行结果,创建一个新的自定义对象并将其附加到您的列表中。

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; 
     } 
相关问题