2014-02-27 82 views
2

在這裏,我是新來的c#。我有一個comboBox代碼,使用戶可以選擇月份和日期。當用戶點擊cmdSend按鈕,程序將檢索月份&日期格式組合框和調用dbConnect.Select類功能做選擇MySQL的聲明。如何根據組合框中的選定值從數據庫檢索數據?

private void cmdSend_Click(object sender, System.EventArgs e) 
    { 
     List<string>[] list; 
     list = dbConnect.Select(month_list.Text, year_list.Text); 

     printer_info.Rows.Clear(); 
     for (int i = 0; i < list[0].Count; i++) 
     { 
      int number = printer_info.Rows.Add(); 
      printer_info.Rows[number].Cells[0].Value = list[0][i]; 
      printer_info.Rows[number].Cells[1].Value = list[1][i]; 
      printer_info.Rows[number].Cells[2].Value = list[2][i]; 
      printer_info.Rows[number].Cells[3].Value = list[3][i]; 
     } 
    } 

檢索數據庫類:

public List<string>[] Select(string month,string year) 
    { 
     string query = "SELECT * FROM page_counter where month ='" + month + "' AND year ='" + year + "' ;"; 

     //Create a list to store the result 
     List<string>[] list = new List<string>[4]; 
     list[0] = new List<string>(); 
     list[1] = new List<string>(); 
     list[2] = new List<string>(); 
     list[3] = new List<string>(); 

     //Open connection 
     if (this.OpenConnection() == true) 
     { 
      //Create Command 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      //Create a data reader and Execute the command 
      MySqlDataReader dataReader = cmd.ExecuteReader(); 

      //Read the data and store them in the list 
      while (dataReader.Read()) 
      { 
       list[0].Add(dataReader["id"].ToString() + ""); 
       list[1].Add(dataReader["month"].ToString() + ""); 
       list[2].Add(dataReader["year"].ToString() + ""); 
       list[3].Add(dataReader["page_count"].ToString() + ""); 
      } 

      //close Data Reader 
      dataReader.Close(); 

      //close Connection 
      this.CloseConnection(); 

      //return list to be displayed 
      return list; 
     } 
     else 
     { 
      return list; 
     } 
    } 

但是這個代碼不工作,有人可以告訴我嗎?

編輯:

string query = "SELECT * FROM page_counter where month = @month AND year = @year;"; 
//Open connection 
if (this.OpenConnection() == true) 
{ 
//Create Command 
MySqlCommand cmd = new MySqlCommand(query, connection); 
cmd.Parameters.AddWithValue("@month",month); 
cmd.Parameters.AddWithValue("@year",year); 

//Create a data reader and Execute the command 
    MySqlDataReader dataReader = cmd.ExecuteReader(); 

//Read the data and store them in the list 
    while (dataReader.Read()) 
    { 
     list[0].Add(dataReader["id"].ToString() + ""); 
     list[1].Add(dataReader["month"].ToString() + ""); 
     list[2].Add(dataReader["year"].ToString() + ""); 
     list[3].Add(dataReader["page_count"].ToString() + ""); 
    } 

    //close Data Reader 
    dataReader.Close(); 

我已編輯的建議的代碼,但是我對AddWithValue一個錯誤,它說:不包含AddWithValue的定義,並沒有擴展方法AddWithValue,我已經添加了Data.MySqlClient引用但仍保持不變。請指教。

+0

是asp.net或WinForm的? –

+0

@ SaghirA.Khatri這是winform c#。 – Ren

回答

1

問題1:您需要使用組合框的SelectedItem屬性才能從中選擇項目。

解決方案1:

替換此:

list = dbConnect.Select(month_list.Text, year_list.Text); 

這一點:

list = dbConnect.Select(month_list.SelectedItem.ToString(),   
         year_list.SelectedItem.ToString()); 

問題2:

我beilve您您的Database中的和Year列是INT列。如果它們是INT列,則不需要在單引號內包含monthyear參數值。

解決方案2:

試試這個:

string query = "SELECT * FROM page_counter where month = 
        " + month + " AND year =" + year + " ;"; 

建議:您的查詢是開放的SQL注入攻擊,我建議使用參數化的查詢,以避免它們。

嘗試這個具有參數化的查詢:

string query = "SELECT * FROM page_counter where month = @month AND year = @year;"; 
//Open connection 
if (this.OpenConnection() == true) 
{ 
    //Create Command 
    MySqlCommand cmd = new MySqlCommand(query, connection); 
    cmd.Parameters.AddWithValue("@month",month); 
    cmd.Parameters.AddWithValue("@year",year); 

     //Remaining same 

     //Create a data reader and Execute the command 
     MySqlDataReader dataReader = cmd.ExecuteReader(); 

     //Read the data and store them in the list 
     while (dataReader.Read()) 
     { 
      list[0].Add(dataReader["id"].ToString() + ""); 
      list[1].Add(dataReader["month"].ToString() + ""); 
      list[2].Add(dataReader["year"].ToString() + ""); 
      list[3].Add(dataReader["page_count"].ToString() + ""); 
     } 

     //close Data Reader 
     dataReader.Close(); 
+0

爲什麼我在AddWithValue上有錯誤?並應該保持MysqlDataReader行? – Ren

+0

@人;是的,你必須保持一致,檢查我編輯的答案。 –

+0

AddWithValue錯誤怎麼樣?爲什麼我收到錯誤? – Ren

相關問題