将自定义搜索过滤器转换为动态SQL

时间:2011-05-26 12:57:22

标签: c# asp.net sql search

我正在编写一个自定义搜索页面,允许用户搜索艺术作品,但我希望允许用户在搜索框中输入自定义命令/标签,让他们可以直接控制过滤结果而无需使用任何内容但搜索框。让我举个例子......

我希望用户能够在文本框中键入以下内容:

Textbox Input: color=red|blue|green value>=5.00+<=10.00

哪个会转换为我可以挂在SQL查询末尾的以下SQL:

AND (Artwork.Color = 'red' OR Artwork.Color = 'blue' OR Artwork.Color = 'green')
AND (Artwork.Price >= 50.00 AND Artwork.Price <= 100.00)

您如何看待......

1)允许人们将这些自定义命令键入文本框并将这些命令转换为SQL,这是正常的做法吗?如果没有,我还能如何传入高级搜索选项,同时保持页面简单?

2)将这些自定义命令转换为SQL的最佳方法是,如何转换由潜在多个运算符(+,|)拆分的未知数量的过滤器?

这是一个使用ASP.NET(C#)和MSSQL构建的Web项目。提前致谢! :)

3 个答案:

答案 0 :(得分:2)

就我个人而言,我总是沿着为所有搜索选项创建UI的路线,其中包含有效输入控件(复选框列表,日期选择器等)。虽然这听起来很痛苦,但我认为一旦你出现了SQL ish systax,它就会变得相同,转换它并使其安全。它对非极客也更加友好。

您可以随时在标有“搜索选项”的隐藏面板中隐藏这些选项,然后它可以在需要时弹出,并在没有时将其释放。

答案 1 :(得分:1)

  1. 是的,它非常common practice。但当然并非所有网站都允许这样做。
  2. 提出自己标准化的搜索条件定义方法。请参阅第1号中的链接。
  3. 查看ASP .NET Query Extender

答案 2 :(得分:1)

要回答你的第一个问题,我认为这不是正常的做法。普通用户很难记住这种非常具体的搜索语法。您可能需要查看Google的advanced search页面,了解他们是如何做到这一点的。这是我见过和使用过的方法。如果你要实现这样的东西,我认为仍然有一个简化的自由格式文本搜索是明智的。这样,新用户无需在使用您的网站之前了解您的语法。