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