针对ODBC数据源在MS Reporting Services(SQL Server 2008)中使用参数

时间:2020-03-05 18:39:16  来源:igfitidea点击:

我在Visual Studio中编写一个报告,该报告采用用户输入参数并针对ODBC数据源运行。我想手动编写查询,并让报表服务在将其发送到数据库之前用参数值替换where子句的一部分。似乎正在发生的事情是,我假设将替换的@parmName实际上是作为SQL语句的一部分发送的。我是否在某处缺少配置设置,或者这根本不可能吗?

我没有在工具中使用过滤器选项,因为这似乎是从数据库中带回完整的数据集,并在SQL Server上进行过滤。

解决方案

回答

听起来我们需要将SQL语句视为表达式。例如:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value

如果where子句是字符串,则需要执行以下操作:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

要点:不要在SQL表达式中使用换行符。如果这样做,我们将得到一个错误。

如果我们需要其他帮助,Holla会回来。

回答

ODBC是否不使用旧的"?"参数语法?试试这个:

select col1, col2 from table1 where col3 = ?

这样,参数的顺序就变得很重要,但是与简单地添加参数值相比,它不容易受到SQL注入的攻击。

回答

我对此问题有些困惑,如果我们正在寻找简单的参数用法,则表示法是:* paramName *,但是,如果我们想在结构上更改WHERE子句(就像我们在sql +中使用?那样),则我们实际上应该在报告中使用自定义代码来定义一个函数,该函数返回查询所需的sql。

不幸的是,当使用自定义代码时,不能直接在生成的查询中引用参数,而必须在那里将值连接到结果字符串中,从而引入了SQL注入的可能性。