1

我在Visual Studio中编写了一个报表,该报表接受用户输入参数并针对ODBC数据源运行。我想手动编写查询,并在将报表服务发送到数据库之前使用参数值替换部分where子句。似乎发生的事情是,我假设将被替换的@parmName实际上是作为SQL语句的一部分发送的。我是否在某处丢失配置设置,或者这仅仅是不可能的?针对ODBC数据源在MS Reporting Services(SQL Server 2008)中使用参数

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

回答

5

听起来您需要将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表达式中使用换行符。如果你这样做,你会得到一个错误。

霍拉回来,如果你需要任何更多的援助。

1

ODBC不使用旧的“?”语法的参数?试试这个:

select col1, col2 from table1 where col3 = ? 

顺序的参数变得不重要了,但它不是简单的附加参数值更不容易受到SQL注入。

0

我有点困惑这个问题,如果你正在寻找简单的参数使用,则记法是:*paramName*,但是如果你想在结构上改变WHERE条款(如您在SQL +使用可能?),那么你应该真正在报告中使用自定义代码来定义一个函数,该函数返回查询所需的sql。

不幸的是,使用自定义代码时,参数不能在生成的查询中直接引用,但必须将其中的值链接到结果字符串中,因此引入了SQL注入的可能性。

1

遇到同样的问题,试图通过ODBC查询访问数据库。

我的原始查询:SELECT A.1 FROM A WHERE A.1 = @parameter导致错误。改为:SELECT A.1 FROM A WHERE A.1 = ?

然后您必须将查询参数与您的报告参数进行映射。

相关问题