2014-09-19 66 views

回答

2

您可以用文本框的支票像

if (comboBox1.Text.Trim().Length == 0) { 
    // your query 
} 
else{ 
// other query 
} 

但是你應該使用參數化查詢。建立這樣的查詢讓你打開SQL注入。

所以,你的SQL字符串應該是

select * from table1 where [email protected] and [email protected] 

你執行查詢之前的參數添加到命令對象。

+0

我看不到我可以如何使用參數化查詢?如果(comboBox1.Text.Trim()。Length == 0){ //我應該在這種情況下做什麼? } else { cmd.Parameters.AddWithValue(「@ id」,「id」); },感謝您的幫助 – 2014-09-20 01:03:50

0

您可以建立您的查詢,當您去,並且仍然保護自己免受SQL注入:

(我是從存儲器寫入這一點,應該編譯...)

using (var conn = new SqlConnection("...")) 
{ 
    var sb = new StringBuilder("SELECT * FROM table1 WHERE"); 

    using (var cmd = new SqlCommand { Connection = conn }) 
    { 
     if (!String.IsNullOrEmpty(comboBox1.Text)) 
     { 
      sb.Append(" id = @ID"); 
      cmd.Parameters.AddWithValue("@ID", int.Parse(comboBox1.Text)); 
     } 

     if (!String.IsNullOrEmpty(comboBox2.Text)) 
     { 
      sb.Append(" name = @NAME"); 
      cmd.Parameters.AddWithValue("@NAME", comboBox2.Text); 
     } 

     var query = sb.ToString(); 

     cmd.CommandText = query.EndsWith("WHERE") ? query.Remove(query.Length - 5) : query; 

     conn.Open(); 

     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // do whatever you need to do with your data 
      } 
     } 
    } 
} 

要記住的東西...

如果你有一打if塊而不是兩個,然後開始嵌套更多if塊這些可能失控。維護將成爲一場噩夢。

如果您只有一些條件,只需創建幾個單獨的查詢並確定哪一個被調用,而不是像這樣動態構建查詢,它可能會更容易。

+0

String.IsNullOrEmpty不會檢查空間嗎? – Tushar 2014-09-19 23:32:49

+0

@TusharGupta它不會檢查一個字符串是否充滿了空白,就像'String.IsNullOrWhiteSpace'一樣。但是OP沒有提到檢查空間。也許他有一個ID和名稱列表,並且每個ComboBox頂部的一個「項目」只是一個空字符串。 – 2014-09-19 23:35:42

+0

所以如果所有的組合框都爲空,查詢將是「SELECT * FROM table1 WHERE」? ,雖然你的解決方案是一個好主意,並感謝您的幫助 – 2014-09-20 00:58:05

0

我找到了解決方案,我想

MySqlDataAdapter的CMD =新MySqlDataAdapter的( 「SELECT * FROM表1,其中(ID = @ ID或@ ID2)和(名稱= @名稱或@ NAME2)」,共);

 if (comboBox1.Text == "") 
     { 
      cmd.SelectCommand.Parameters.AddWithValue("@id", "1"); 
      cmd.SelectCommand.Parameters.AddWithValue("@id2", "1"); 
     } 
     else 
     { 
      cmd.SelectCommand.Parameters.AddWithValue("@id", comboBox1.Text); 
      cmd.SelectCommand.Parameters.AddWithValue("@id2", "0"); 
     } 

     if (comboBox2.Text == "") 
     { 
      cmd.SelectCommand.Parameters.AddWithValue("@name", "1"); 
      cmd.SelectCommand.Parameters.AddWithValue("@name2", "1"); 
     } 
     else 
     { 
      cmd.SelectCommand.Parameters.AddWithValue("@name", comboBox1.Text); 
      cmd.SelectCommand.Parameters.AddWithValue("@name2", "0"); 
     } 

//感謝大家的幫助,我使用的所有什麼ü給我創造這個解決方案

相關問題