我有一个Windows窗体,用户可以在多个文本框中输入多个值,以获得更快的搜索结果。但是在运行时,它只需要第一个参数,即全名,而忽略另一个。不知道为什么会这样。 我在结果中得到了我不想要的全部表格。
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 :(得分: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()语句。如果这种观察是正确的,请告诉我。