【问题标题】:Unable To Fetch Records From SQL Table To DataGridView In C#无法从 SQL 表中获取记录到 C# 中的 DataGridView
【发布时间】:2014-03-01 15:46:42
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 已检查。还没有结果。还有其他选择吗?
  • 您是否在所有文本框中输入文本?如果您错过任何人,查询条件语句将具有此表达式OR Address LIKE '%%',这将导致在输出中选择所有记录
  • @DipenduPaul 如何避免这种情况?如果用户只输入名称并想要该名称或仅与该名称相似的结果怎么办?

标签: c# sql datagridview


【解决方案1】:

我认为,当用户将文本框留空时,她不希望文本框条目对应的条件被包含在内,而这似乎是当前出现问题的地方。但这是一个假设,需要您验证。

所以在我看来,查询应该这样构建:

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() 语句。让我知道这个观察是否正确。

【讨论】:

  • 你能告诉我如何使用存储过程吗?如果您这样做,我将不胜感激。
  • 是的,当然。我建议你从另一个问题开始。这样你的问题就会引起其他成员的注意。与我分享问题链接,我也会参与其中。
  • 抱歉赶上晚了。我已将我的解决方案添加到您的帖子中。如果您仍在寻找解决方案,请查看它。如果它对你有用,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
相关资源
最近更新 更多