0

我有一个要求,用户将为报告选择三个过滤条件。这些条件可以是表的任何字段。用户将为一个部门定义一次,对于其他部门可能会有所不同。

现在的挑战是使用这些动态标准建立一个查询。除了动态查询之外还有其他方法可以实现吗?如果动态查询是唯一可能的解决方案,我怎样才能最大限度地减少 SQL 注入。

我会很感激任何帮助。

编辑

我实际上正在寻找一种方法来获取设置为过滤条件的字段及其值。我们正在使用 SP。

现在我应该传递列名及其值还是有更好的方法呢?

4

3 回答 3

0

尝试这个:

WHERE
      (Col1 = @Col1Value OR @Col1Value IS NULL)
  AND (Col2 = @Col2Value OR @Col2Value IS NULL)
  AND (Col3 = @Col3Value OR @Col3Value IS NULL)
.....

然后,您可以为未选择的列传递实际(选择的)值或 DBNull.Value。

于 2013-01-25T09:06:42.470 回答
0
AND (@variable1 = '-1' OR column = @variable1)
AND (@variable2 = '-1' OR column = @variable2)
AND (@variable3 = '-1' OR column = @variable3)

这是另一种尝试

于 2013-01-25T08:59:15.983 回答
0

我不确定你的意思

这些条件可以是表的任何字段。用户将为一个部门定义一次,对于其他部门可能会有所不同。

首先,访问数据库的方式有很多种。你如何读/写你的数据?

  • ADO.Net
  • 休眠
  • 实体框架
  • 其他?

至于我自己,我只知道NHibernate。在这种情况下,我将创建一个所谓的查询类,并将所需的过滤器作为属性。该类本身将在内部创建 HQL(或 ICriteria),使用参数以避免任何注入。或者也有可能创建一个存储过程,将过滤器作为参数并返回一个视图。

还是我完全错过了这里的重点?

于 2013-01-25T09:04:20.003 回答