代码之家  ›  专栏  ›  技术社区  ›  N8g

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

  •  1
  • N8g  · 技术社区  · 17 年前

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

    我没有在工具中使用filter选项,因为这似乎会从数据库中返回完整的数据集,并在SQL Server上进行筛选。

    4 回复  |  直到 10 年前
        1
  •  5
  •   Jason Punyon    17 年前

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

    如果你需要更多的帮助,请回电。

        2
  •  1
  •   Matt Hamilton    17 年前

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

    select col1, col2 from table1 where col3 = ?
    

    那么,参数的顺序就变得很重要了,但是它比简单地附加参数值更不容易受到SQL注入的攻击。

        3
  •  1
  •   H.G.    14 年前

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

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

    然后必须将查询参数与报表参数映射。

        4
  •  0
  •   Sujania Wayne Ye    10 年前

    我对这个问题有点困惑,如果您要寻找简单的参数用法,那么符号是: *paramName* 但是,如果要在结构上更改 WHERE 子句(就像您在SQL+中可能使用的?)然后,您应该在报表中使用自定义代码来定义一个函数,该函数返回查询所需的SQL。

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