2011-05-26 113 views
4

我正在编写一个自定义搜索页面,该页面将允许用户搜索图稿,但我希望允许用户在搜索框中输入自定义命令/标签,以便他们可以直接控制过滤他们的结果无需使用除搜索框之外的任何内容。让我举一个例子......将自定义搜索过滤器转换为动态SQL

我希望用户能够键入类似以下到一个文本框:

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,是这款N正式的练习?如果没有,我还能如何让高级搜索选项通过,同时保持页面简单?

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

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

+1

如果您只是将这些自定义搜索参数转换为动态SQL,就会冒SQL注入攻击的风险。你有没有办法使用某种ORM(例如Linq-to-SQL)? – 2011-05-26 13:00:00

+0

使用ORM意味着您信任用户输入正确的语法。如果输入:shape = square | triangle和“shape”不是数据模型中的字段,该怎么办? – Tundey 2011-05-26 13:05:58

+0

就我个人而言,我一直沿着创建用于有效输入控件的所有搜索选项(复选框列表,日期选择器等)的UI的路线。尽管这首先听起来很痛苦,但我认为,一旦你用SQL ish systax出现了,它就会变成同样的东西,并将其转换并安全使用。它也对非极客更友好。 – 2011-05-26 13:07:18

回答

2

就我个人而言,我一直沿着创建用于有效输入控件(复选框列表,日期选择器等)的所有搜索选项的UI的路线。尽管这首先听起来很痛苦,但我认为,一旦你用SQL ish systax出现了,它就会变成同样的东西,并将其转换并安全使用。它也对非极客更友好。

您可以将选项始终隐藏在标有“搜索选项”的隐藏面板中,然后可以在需要时弹出,并在没有时释放屏幕。

+0

再次感谢@Jon的帮助,我认为这是对我的问题更好,更快,更安全的解决方案! :) – 2011-05-26 14:38:10

1
  1. 是的,这是一个相当commonpractice。但当然不是所有的网站都允许这样做。
  2. 想出您自己的定义搜索条件的标准方式。请参阅1号。

的链接看看ASP .NET Query Extender

+0

感谢您的回复,SO和Google允许的内容几乎完全符合我的要求,现在我将查看查询扩展程序。 – 2011-05-26 13:14:56

1

要回答你的第一个问题,我不认为这是正常的做法。普通用户很难记住这种特定的搜索语法。你可能想看看谷歌的advanced search页面,看看他们是如何做到这一点。这就是我所看到和使用的方法。如果你要实现这样的事情,我认为仍然有一个简化的自由格式文本搜索是明智的。这样,新用户在使用您的网站之前不必学习您的语法。

+0

啊哈!是的,我打算有一个单独的“高级搜索”页面,这将是一个完整的标准表格选项,文本框,下拉框,复选框等页面。用户可以填写此表单并点击搜索按钮,这将转换他们的搜索转换成我在问题中显示的格式。做这一切的原因是因为高级搜索页面上有很多选项,如果我将它们全部显示在顶部,结果页面会显得有点愚蠢,但我仍然希望用户能够从那里。 – 2011-05-26 13:12:12

相关问题