2014-02-27 61 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

相关问题