【问题标题】:Search using single input while searching multiple tables在搜索多个表时使用单个输入进行搜索
【发布时间】:2014-12-18 17:56:50
【问题描述】:

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

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

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

  1. Category.Category_Name nchar
  2. Product.Description nchar
  3. Product.Product_成本浮动
  4. Manufacturer.Manufacturer_Name nchar

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

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

【问题讨论】:

    标签: c# mysql asp.net


    【解决方案1】:

    我不知道这是否能准确回答您的问题,但我会尝试。虽然,公平地说,您需要什么还不是很清楚,而且问题接近于Too Broad

    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 Injection,您需要使用查询参数化。查询需要稍作更改,但Command 对象设置需要进行更多更改。

    【讨论】:

    • 我想要的是有一个搜索栏(文本框)和一个搜索按钮。如果我在其中写“AMD”,那么它将搜索所有具有 AMD 类别名称的产品。如果我在“查看”框内写下,它会给我带来产品名称为 ViewSonic 的产品。如果我再写“40”,它会给我带来价格为 40 或 400 欧元之类的产品。我已经看到了如何在浮点查询中使用 BETWEEN 语法,但并不是必须使用它。我不知道这是否有助于您更好地理解我的问题。我是 VS 的新手,教授问我们它是如何完成的,这就是为什么。
    • 这就是我问的原因。对我的英语也很抱歉:) 另外,在之前的练习中,我只做了一件事来搜索,在 C# 中有一个放置过滤器的地方。像这样: // 添加 LIKE 过滤器 strCommandText += " WHERE Description LIKE '%" + filterValue + "%'";我想知道你是如何将所有类似的子句放在 where 中的,或者一般来说你是如何用 C# 编写的
    • 至于查询我相信很容易做到。只需带上所有 4 张桌子,然后让按钮完成这项工作吗?
    • @Orusthar 好吧。检查我更新的答案。这应该会为您带来来自单个文本框和按钮的更多结果
    • 谢谢!我会在几个小时后尝试(这里是 00:13:P)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多