2013-05-01 53 views
0

我有一個主窗體(formMain)在其加載事件中加載用戶控件(分類)。在用戶控件分類的加載事件中,它顯示一個datagridview。讓我給你看看代碼。 分類我的應用程序中的mySQL查詢出了什麼問題?

string serverstring = "user id = root; password=; server=localhost; database=purchase_order; connection timeout=3;"; 

     private void load_data() 
     { 
      MySqlConnection con = new MySqlConnection(serverstring); 

      try 
      { 
       string query = "SELECT * FROM tblclassification"; 

       MySqlCommand cmd = new MySqlCommand(query, con); 
       MySqlDataAdapter da = new MySqlDataAdapter(cmd); 


       DataTable dt = new DataTable(); 
       da.Fill(dt); 


       dataGridView1.DataSource = dt; 
       dataGridView1.DataMember = dt.TableName; 
      } 
      catch (Exception) 
      { 


      } 
      finally 
      { 
       if (con.State == ConnectionState.Open) 
       { 
        con.Close(); 
       } 
      }  
     } 

幸運的是,它的工作,但是當我點擊位於另一個用戶控制搜索按鈕(搜索)它提出了在主窗體(formMain)事件,其中,它必須在用戶控制過濾器的datagridview (分類),但我的代碼不起作用。 也許我的字符串查詢中有語法錯誤。這是代碼。

主要形式

void SearchClicked(object sender, EventArgs e) 
     { 
      Search content = _searchbox; 
      classification control = new classification(); 
      MySqlConnection con = new MySqlConnection(serverstring); 


      try 
      {     
       string query = "SELECT * FROM tblclassification WHERE class_name LIKE '%@search'"; 

       MySqlCommand cmd = new MySqlCommand(query, con); 
       MySqlDataAdapter da = new MySqlDataAdapter(cmd); 


       //MessageBox.Show(content.txtboxSearch.Text); 
       cmd.Parameters.AddWithValue("@search", content.txtboxSearch.Text); 


       DataTable dt = new DataTable(); 
       da.Fill(dt); 




       control.dataGridView1.DataSource = dt; 
       control.dataGridView1.DataMember = dt.TableName; 


      } 
      catch (Exception) 
      { 

      } 
      finally 
      { 
       if (con.State == ConnectionState.Open) 
       { 
        con.Close(); 
       } 
      }  
     } 
+0

有一個空的catch沒有幫助。 – Habib 2013-05-01 05:23:09

+0

你想查找以搜索文本結尾的class_name嗎? – 2013-05-01 05:25:13

+0

@Habib好的,在Catch中顯示錯誤信息更好嗎? – Harvey 2013-05-01 05:27:59

回答

2

使用CONCAT()

string query = @"SELECT * 
       FROM tblclassification 
       WHERE class_name LIKE CONCAT('%', @search)"; 
MySqlCommand cmd = new MySqlCommand(query, con); 
cmd.Parameters.AddWithValue("@search", content.txtboxSearch.Text); 


MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
+1

可能是值得的,以解釋爲什麼:-) – 2013-05-01 05:23:54

+0

我試過你的代碼先生,但仍然無法正常工作。它不會過濾class_name。 – Harvey 2013-05-01 05:26:25

+0

看到我更新的答案。 *在傳遞給DataAdapter類之前添加一個參數* – 2013-05-01 05:32:53

0

嘗試

「SELECT * FROM purchase_order.tblclassification WHERE class_name LIKE( '%@搜索%')」;

或..

「SELECT * FROM tblclassification WHERE(class_name LIKE '%@搜索%')」

+0

@JW你擊敗了我的拳頭:) – Driftware 2013-05-01 05:25:28

+0

這是一樣的先生,它不會過濾class_name。 :( – Harvey 2013-05-01 05:37:50

+0

'@'字符的用途是什麼,試試這個格式,而不是看編輯的答案 – Driftware 2013-05-01 05:47:55