2011-07-29 173 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; 
     } 
相關問題