3

如何将null参数传递到 SQL 2008 报告中?ReportExecutionService.Render()在我通过调用方法设置参数(不包括可为空的参数)之后,与 ReportExecution 和 ReportService2005 Web 服务接口的代码在执行该方法时总是会产生错误ReportExecutionService.SetExecutionParameters()

"...This report requires a default or user-defined value for the report parameter...to run or subscribe to this report, you must provide a parameter value."

即使该参数在 .rdl 文件中定义为null能够,并且默认为null.

我必须更改我的代码吗?更改 .rdl 文件中的参数选项?

var rs = new ReportExecutionService();
rs.Url= "http://Z/ReportServer/ReportExecution2005.asmx";     
rs.Credentials = CredentialCache.DefaultCredentials;
rs.ExecutionHeaderValue = new ExecutionHeader();

var executionInfo = rs.LoadReport(ReportTarget, null);
var parameterList = new List<ParameterValue>();

foreach (ParameterValue parameter in Parameters)
{
  parameterList.Add(parameter);
}

foreach (var expectedParameter in executionInfo.Parameters)
{
  if 
  (  
      expectedParameter.Nullable && 
      !parameterList.Exists(delegate(ParameterValue pv) 
      { return pv.Name == expectedParameter.Name; })
  )
  {
     var parameter = new ParameterValue();
     parameter.Name = expectedParameter.Name;
     parameter.Value = null;

     parameterList.Add(parameter);
  }
}

rs.SetExecutionParameters(parameterList.ToArray(), "en-us");

Warning[] warnings = null;
string[] streamIDs = null;
string encoding = null;
string extension = null;
string mime = null;

var content = rs.Render("PDF", null, out extension, out mime, out encoding, out warnings, out streamIDs);
4

2 回答 2

1

似乎是 SSRS 中的错误。特别是因为我有一些默认空值有效的报告,并且一些给出此错误消息“...报告需要报告参数的默认值或用户定义值...”

无论如何,这段代码似乎在 VB 中对我有用。

params = New ArrayList

...

Dim ssrsPrm As New Microsoft.Reporting.WebForms.ReportParameter(param.Name)
ssrsPrm.Values.Add(Nothing)
params.Add(ssrsPrm)

...

Me.ReportViewer1.ServerReport.SetParameters(DirectCast(params.ToArray(GetType(Microsoft.Reporting.WebForms.ReportParameter)), Microsoft.Reporting.WebForms.ReportParameter()))
于 2011-02-02T17:45:45.180 回答
0

这个来自一个稍微不同的问题的答案有帮助吗?如果没有,也许更多的代码会有所帮助。

高温高压

于 2009-07-08T22:59:17.273 回答