无法在C#中从SQL表获取记录到DataGridView

时间:2014-03-01 06:48:26

标签: c# sql datagridview

我有一个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();
     }
 }

我在哪里弄错了,请指导我。

由于

1 个答案:

答案 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()语句。如果这种观察是正确的,请告诉我。