How do you pass in null parameters into a SQL 2008 Report? The code that interfaces with the ReportExecution & ReportService2005 web services always yields an error upon executing the ReportExecutionService.Render() method, after I set the parameters (not including the nullable one) via invoking the ReportExecutionService.SetExecutionParameters() method:
"...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."
even though that parameter is defined in the .rdl file as being nullable, and defaulting to null.
Must I change my code? Change parameter options in the .rdl file?
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);
Seems like a bug in SSRS. Especially since I have some reports where the default null value works, and some giving this error message "...report requires a default or user-defined value for the report parameter..."
Anyway, this code seems to work for me in 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()))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With