2015-07-20 66 views
1

我想實現一種搜索方法,用戶可以在其中選擇組合框中的 搜索類型並在文本框中輸入搜索值。如何在c#和SQL Server中實現搜索方法?

搜索按鈕代碼在這裏,但是當我點擊搜索按鈕時,結果datagridview是空的。

什麼問題?

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlCommand cmd = new SqlCommand(); 

    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"; 

    con.Open(); 

    cmd.Connection = con; 

    DataSet ds = new DataSet(); 

    SqlDataAdapter da = new SqlDataAdapter(); 

    cmd.CommandText = "select * from person where @[email protected]"; 

    if (comboBox1.SelectedIndex == 0) 
    { 
     cmd.Parameters.AddWithValue("@parameter1", "name"); 
    } 
    else 
    { 
     cmd.Parameters.AddWithValue("@parameter1", "code"); 
    } 

    cmd.Parameters.AddWithValue("@parameter",textBox1.Text); 

    da.SelectCommand = cmd; 
    da.Fill(ds); 

    dataGridView1.DataSource = ds.Tables[0]; 
    con.Close(); 
} 
+0

爲什麼不使用EF?只是想知道,會容易得多。 –

+0

您不能參數化字段名稱等對象標識符 –

回答

1

除非您像使用動態SQL一樣需要額外考慮(在此情況下不推薦),否則無法對列名進行參數化。

你應該做的是改變你的邏輯和查詢來處理名稱或文本NULL,或者只是有條件邏輯來構造你的查詢。

string colSearchName; 

if (comboBox1.SelectedIndex == 0) 
    colSearchName = "name"; 
else 
    colSearchName = "code"; 

cmd.CommandText = string.Format("select * from person where {0}[email protected]", colSearchName); 

// ... so on and so forth