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