搜索多个表时使用单个输入进行搜索

本文关键字:搜索 单个 输入 | 更新日期: 2023-09-27 18:34:47

我需要为 ASP.NET C# 网站创建一个搜索按钮。制作带有 1 种搜索关键字的按钮很容易。例如:

Select * from table where name like '%' + search_criteria + '%'

但我真正需要的是制作一个搜索按钮,其中包含来自不同表格的更多"喜欢"。我的数据库中有

  1. Category.Category_Name nchar
  2. 产品描述 nchar
  3. Product.Product_Cost浮子
  4. Manufacturer.Manufacturer_Name nchar

你可以看到哪些在哪个表中。同样在 GridView 的帮助下,我只想在我的网页上显示前 3 个。但是我想要一个带有单个按钮的文本框,当我尝试搜索某些内容时,请在 1 中搜索类别名称或描述或成本或制造商名称。

我读过您只能从一个表中搜索多个内容或使用包含语句来从不同的表中搜索。我在互联网上看了很多小时,但徒劳无功。有人可以帮我弄清楚我需要在 WHERE 子句中正确执行什么,以便我可以将其放入 LIKE 过滤器中的 aspx.cs C# 代码中并让我的按钮工作吗?

搜索多个表时使用单个输入进行搜索

我不知道这是否完全回答了你的问题,但我会尝试。虽然,公平地说,你的需求并不是很清楚,而且这个问题太宽泛了

void btnSearch_Click (object sender, EventArgs e)
{
    string sql = "select Product_name from Product p inner join Category c on p.Category_id = c.Category_id WHERE c.Category_Name Like '%{0}%' UNION ALL " +
        "select Product_name from Product where Description Like '%{0}%' UNION ALL " +
        "select Product_name from Product p inner join Manufacturer m on p.Manufacturer_id = m.Manufacturer_id WHERE m.Manufacturer_id Like '%{0}%' ";
    decimal price;
    if (decimal.TryParse(txtSearch.Text.Trim(), out price)
        sql +=   "UNION ALL select Product_name from Product where Product_Cost >= {0} " 
    Search(string.Format(sql, txtSearch.Text.Trim());
}

void Search (string sql)
{
    // use your sql here to fill the grid, etc.
}

注意 @JoelCoehoorn注意到使用此代码进行 SQL 注入的可能性 [这是安全问题]。不知道你这个时候是否在意。但是为了防止SQL注入,你需要使用查询参数化。需要对查询稍作更改,但对对象设置进行更多更改Command