2014-03-01 34 views
0

我有一個窗體窗體,用戶可以在多個文本框中輸入多個值以獲得更快的搜索結果。但是在運行時,它只需要第一個參數,即全名並忽略其他參數。不知道這是爲什麼。 我得到了我不想要的結果中的全表。無法將記錄從SQL表中提取到DataGridView在C#中

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection("Data Source=MADDY-PC\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"); 

    try 
    { 
     con.Open(); 

     string sql = "SELECT * FROM Customers WHERE ContactName LIKE '%" + txtFullName.Text + "%' OR Address LIKE '%" + txtAddress.Text + " %' OR Phone LIKE '%"+txtContactNumber.Text+"%'"; 

     SqlCommand cmd = new SqlCommand(sql, con); 

     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable ds = new DataTable(); 
     da.Fill(ds); 
     if (ds.Rows.Count > 0) 
     { 
      dataGridView1.DataSource = ds; 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 
    finally 
    { 
     con.Close(); 
    } 
} 

我在哪裏犯錯,請指導我。

感謝

+0

檢查。沒有結果。還有其他選擇嗎? – user3095539

+0

您是否在所有文本框中輸入文字?如果你錯過任何人,查詢條件語句將具有這個表達式'OR Address LIKE'%%'',這將導致在輸出 –

+0

@DipenduPaul中選擇的所有記錄如何避免這種情況?如果用戶只輸入名稱並且只需要該名稱的結果或類似於該名稱的結果呢? – user3095539

回答

0

我認爲,當用戶離開文本框爲空,她不想要的文本框項對應,被該條件而這也正是它似乎是當前走錯了。但這是一個假設,需要您驗證。

所以,在我看來,查詢應該建這樣的:

string sql = "SELECT * FROM Customers " 
string condition = String.Empty; 

if(!String.IsNullOrEmpty(txtFullName.Text)) 
    condition += "WHERE ContactName LIKE '%" + txtFullName.Text + "%' " 

if(!String.IsNullOrEmpty(txtAddress.Text)) 
    if(!String.IsNullOrEmpty(condition)) 
    condition += "OR Address LIKE '%" + txtAddress.Text + " %' " 
    else 
    condition += "WHERE Address LIKE '%" + txtAddress.Text + " %' " 

//and so on.... 


sql = sql + condition; 
SqlCommand cmd = new SqlCommand(sql, con); 

此外,我希望大家不要忘記添加dataGridView1.Databind()語句。讓我知道這個觀察是否正確。

+0

謝謝Dude ...你救了我的一天..我欠你一個芽... – user3095539

+0

不客氣! –

+0

你能告訴我如何使用存儲過程來做到這一點嗎?如果你這樣做,我會很感激。 – user3095539