【问题标题】:SSRS URL Parameter won't setSSRS URL 参数不会设置
【发布时间】:2010-12-17 22:25:57
【问题描述】:

我在 web 表单中有以下 c# 代码:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string url;
            string startdate;
            string enddate;
            string costcenter;
            string account;

            //url = "http://server/reportserver?/Finance/Cost Spending/Cost Center Details&rs:Command=Render&rc:Parameters=false";
            url = "http://server/reportserver?/Finance/Cost Spending/Cost Center Totals&rs:Command=Render&rc:Parameters=false";
            costcenter = "&costcenter=990";

            startdate="&startdate=" + Convert.ToString(txtStartDate.Text);
            enddate = "&enddate=" + Convert.ToString(txtEndDate.Text);

            account="&account=" + Convert.ToString(GridView1.SelectedRow.Cells[1].Text);

            url =url + startdate + enddate + costcenter + account;


            //TextBox1.Text = Convert.ToString(GridView1.SelectedRow.Cells[1].Text);
                Response.Redirect(url, false);

        }

我已经针对另一份报告测试了此代码的一个非常相似的版本,唯一不同的是 costcenter 参数。另一个报告运行良好,但每次我运行此代码时都会收到错误消息:“'costcenter' 参数缺少值”。我能想到的两个报告之间唯一显着不同的是,在成本中心总计报告中,成本中心参数用于填充帐户参数(两者都是多选)。

参数页面如下所示:

【问题讨论】:

  • 叹息,我想这里没有人知道....
  • 您使用的是什么版本的 SSRS?
  • 只是一个疯狂的猜测,是否 url 字符串中的 Parameter=false 会导致这种行为?
  • Parameters=false 除了从 HTML 查看器中隐藏参数选项之外,什么都不做。但是,了解这些选项是否设置正确会很有趣。

标签: c# asp.net sql-server reporting-services


【解决方案1】:

您是否在报告中使用多个数据集?如果是这样,请尝试将数据集设置为串行执行:

  1. 在报表设计器中打开数据源对话框
  2. 选中“使用单一事务”复选框

您可以尝试其他一些故障排除步骤:

  • 尝试从查询字符串中删除报表服务器命令“&rs:Command=Render”,看看会发生什么。
  • 另外,如果您将查看器命令更改为 true,您是否至少可以看到参数已正确填充(即:“&rc:Parameters=true”?

【讨论】:

  • 我不知道你在说什么数据源对话框。此外,该项目是在 vs 2010 中,但报告是 SSRS 2005。
【解决方案2】:

我的印象是,在 Web 服务器上运行报表和在代码中运行报表之间的一个区别是,在代码中它不会为参数的“可用值”查询而烦恼。在代码中,您不是从下拉列表中选择人类可读的标签,然后传入相应的值。相反,您只需将值提供给参数。

那么,您是否尝试过完全不指定成本中心参数?如果 account 参数是真正基于报表的所有记录集,那么设置它可能是多余的。

更新:

自从我最初写这个答案以来,我已经了解到依赖参数(至少在 SSRS 2008 中)必须在它们所依赖的参数之后。确保您的参数以合理的方式排序。

看起来你就是这么做的,我只是想提一下这种可能性。

【讨论】:

  • 是的,我遇到了同样的错误。 "'costcenter' 参数缺少值"
【解决方案3】:

检查 Costcenter 990 是否在您的数据库中!

我做了一些测试。我有一个表“Person”,有 4 行,PersonID 为 1 到 4。如果使用“&rc:Parameters=true”为所需的单值参数设置 &PersonID=5,那么我会得到一个下拉框,因此我可以选择其中之一4名有效人员。

如果我将 &PersonID=5 设置为“&rc:Parameters=false”,则会收到消息“PersonID 参数缺少值”。

【讨论】:

  • 990 存在,它是我用来测试报告和存储过程的主要值。
  • costcenter 参数的“可用值”是什么?在我看来,990 不是可用值之一。请记住,将与之比较的是 Value 字段,而不是 Label 字段。 990 是 ID 还是成本中心的名称?如果是 ID,最好将 Parameter 设为整数。如果这没有帮助,请尝试将 costcenter 参数的一些值修改到浏览器 URL 栏中,直到报告显示!
  • 要检查可用值,您需要查看报告代码,或者按照艾莉森的建议并设置 rc:Parameters=true。
【解决方案4】:

我遇到了类似的问题。删除参数依赖项使其工作。我有参数 B 取决于参数 A。当您直接访问报表服务器时,它工作得很好。但是,当我尝试以编程方式将其绑定到报表查看器控件时,即使在使用 ReportParameter 提供参数并添加到参数列表之后,它也只是说“缺少'参数 B'”。

所以,我回到了报表服务器。通过删除参数依赖性重新部署报告。有效。 :-)

【讨论】:

  • 太棒了!你是从这里想出来的还是自己搞砸了?
【解决方案5】:

好的,感谢艾莉森对参数/数据集的分析,我找到了问题所在。发生的事情是我有 4 个参数,开始日期、结束日期、成本中心和帐户。在报告中,账户数据集依赖于成本中心参数来填充下拉列表。我创建了一份报告副本,删除了成本中心参数,并从帐户参数中删除了数据集。我更新了代码并运行它和 BAM!它奏效了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多