将参数从ReportViewer传递到SSRS报告的存储过程数据源

时间:2011-04-29 23:05:49

标签: reportviewer reporting-services

我在BIDS中为SSRS 2008 R2开发了一个报告,该报告使用存储过程作为其数据源。我在报告中设置了参数,报告将它们传递给存储过程,一切正常。但是,我现在需要转换报告,以便它从C#ASP.Net应用程序中的ReportViewer控件传递给它的参数,而不是允许它们在SSRS接口中输入。我认为我在C#端很好(使用ServerReport.SetParameters),但我不知道在BIDS中做什么来将这些传入的参数值路由到存储过程。任何人都可以提供一个例子吗?

我还需要阻止报告显示用于输入参数的UI。我应该将参数设置为隐藏还是内部?

1 个答案:

答案 0 :(得分:2)

我会将报告参数设置为内部,但请阅读本文http://msdn.microsoft.com/en-us/library/aa337234.aspx中的隐藏和内部参数部分,并自行决定适合该问题的内容。

假设你有一个像

这样的存储过程
CREATE PROCEDURE dbo.RepeatAfterMe
(
    @inputText varchar(50)
,   @repeatFactor int = 10
)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @count int
    DECLARE @hack TABLE (inputText varchar(50))

    SET @count = 0
    WHILE @count < @repeatFactor
    BEGIN
        INSERT INTO @hack SELECT @inputText
        SET @count = @count + 1
    END
    SELECT H.* FROM @hack H
END
GO

在SSRS中定义2个报告参数(InputText为字符串,RepeatFactor为整数)。然后,在您的SSRS中,您的数据集将被定义为

  

执行dbo.RepeatAfterMe @inputText,   @repeatFactor

然后在数据集的“参数”选项卡上,它看起来像

@inputText =Parameters!InputText.Value 
@repeatFactor =Parameters!RepeatFactor.Value

为了解决方案的完整性,这是我用于将参数传递给ID为rvReportViewer

的报表控件的代码的近似值
Microsoft.Reporting.WebForms.ReportParameter[] reportParameters = null;
reportParameters = new Microsoft.Reporting.WebForms.ReportParameter[2];
reportParameters[0] = new Microsoft.Reporting.WebForms.ReportParameter("inputText", txtInput);
reportParameters[1] = new Microsoft.Reporting.WebForms.ReportParameter("repeatFactor", 10);
try
{
    rvReportViewer.ServerReport.SetParameters(reportParameters);
}
catch(Microsoft.Reporting.WebForms.ReportServerException ex)
{
    Response.Redirect("~/Error.aspx");
}