我收到错误:
此报告需要报告参数“*”的默认值或用户定义值。要运行或订阅此报告,您必须提供一个参数值。
即使正在填充值“*”,也偶尔会从我的报告服务器中获取。有什么想法或线索可以让我追踪到它吗?几点。
- 我以 4 路异步方式运行报告(意味着 4 个线程同时生成报告)。
- 报告有 2 个提供的参数(始终提供)和一个派生参数。
- 我每个 session 运行 1,000 个报告,每个线程约 250 个报告。
有时错误会在几秒钟后发生,有时会在数小时后发生。
using System;
using System.Globalization;
using System.IO;
using Cns.ReportExecution2005;
public class PdfGenerator
{
private readonly ReportExecutionService reportExecutionService;
public PdfGenerator(string executionServiceAddress)
{
// Create a new proxy to the web service
this.reportExecutionService = new ReportExecutionService
{
Credentials = System.Net.CredentialCache.DefaultNetworkCredentials,
Url = executionServiceAddress
};
}
public Stream GenerateReport(string reportName, string format, ReportGeneratorParameter[] parameters)
{
if (reportName == null)
{
throw new ArgumentNullException("reportName");
}
if (format == null)
{
throw new ArgumentNullException("format");
}
this.reportExecutionService.LoadReport(reportName, null);
if (parameters != null)
{
var executionParameters = new ParameterValue[parameters.Length];
for (int i = 0; i < parameters.Length; ++i)
{
executionParameters[i] = new ParameterValue
{
Label = parameters[i].Name,
Name = parameters[i].Name,
Value = Convert.ToString(parameters[i].Value, CultureInfo.InvariantCulture)
};
}
this.reportExecutionService.SetExecutionParameters(executionParameters, "en-us");
}
string extension;
string encoding;
string mimeType;
Warning[] warnings;
string[] streamIDs;
byte[] results = this.reportExecutionService.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs);
return new MemoryStream(results);
}
}
对于寻找有关此主题的答案的其他人(谷歌搜索将我带到这里),它也可能是由定义为“来自查询”而不是“未查询”的参数引起的。然后,如果您传入的参数根据查询无效,则会出现此错误。例如,您有一个名为 CustomerId 的参数,它通过 Web 界面显示为 Select CustomerId, CustomerName from Customer假设数据库中的有效客户 ID 是 1 到 10。如果你在 c# 中传入一个值为 24 的参数,(即超出该范围)RS 就好像该参数从未传入一样,因为它检测到它不在有效范围内。希望这有帮助
我是一名优秀的程序员,十分优秀!