我有一个要求,即用户将为报告选择三个过滤条件。这些标准可以是表格的任何字段。用户将为部门定义一次,其他部门可能会有所不同。
现在的挑战是使用这些动态标准建立查询。除了动态查询之外还有其他方法可以实现吗?如果动态查询是唯一可行的解决方案,我如何最小化SQL注入。
我很感激任何帮助。
我实际上正在寻找一种可以获取设置为适合标准及其值的字段的方法。我们正在使用SP。
现在我应该传递列名及其值还是有更好的方法吗?
答案 0 :(得分:0)
AND (@variable1 = '-1' OR column = @variable1)
AND (@variable2 = '-1' OR column = @variable2)
AND (@variable3 = '-1' OR column = @variable3)
这是另一种尝试
答案 1 :(得分:0)
我不确定你的意思
这些标准可以是表格的任何字段。用户将为部门定义一次,其他部门可能会有所不同。
首先,有许多不同的方式来访问您的数据库。你如何读/写你的数据?
至于我自己,我只熟悉NHibernate。在这种情况下,我将创建一个所谓的查询类,其中包含所需的过滤器作为属性。类本身内部会创建HQL(或ICriteria),使用参数以避免任何注入。 或者也可以创建存储过程,将过滤器作为参数并返回视图。
或者我完全忽略了这一点?
答案 2 :(得分:0)
试试这个:
WHERE
(Col1 = @Col1Value OR @Col1Value IS NULL)
AND (Col2 = @Col2Value OR @Col2Value IS NULL)
AND (Col3 = @Col3Value OR @Col3Value IS NULL)
.....
然后,您可以为未选择的列传递实际(选定)值或DBNull.Value。