C# 无参数处理Crystal报告

C# 无参数处理Crystal报告,c#,windows,crystal-reports,visual-studio-2015,C#,Windows,Crystal Reports,Visual Studio 2015,我目前正在运行一个Windows服务,可以按计划将Crystal报表导出为PDF。在运行的66个报告中,大约有5个没有定义参数 通过使用Crystal Reports DLL,我了解到ReportDocument.Export()方法需要参数,因为我在遇到ReportDocument.Export()方法时遇到了“缺少参数值”异常 我目前正在使用此方法设置参数: private void SetParameters(string rawParameters = null) {

我目前正在运行一个Windows服务,可以按计划将Crystal报表导出为PDF。在运行的66个报告中,大约有5个没有定义参数

通过使用Crystal Reports DLL,我了解到ReportDocument.Export()方法需要参数,因为我在遇到ReportDocument.Export()方法时遇到了“缺少参数值”异常

我目前正在使用此方法设置参数:

private void SetParameters(string rawParameters = null)
        {
            var crystalParameters = new Dictionary<string, object>();
            var parameters = String.IsNullOrEmpty(rawParameters) ? null : HttpUtility.ParseQueryString(rawParameters);

            if(parameters != null)
            {
                foreach (string rawKey in parameters.AllKeys)
                {
                    var value = parameters[rawKey];
                    // Check for array value (e.g. key[0]=value)
                    var arrayCheck = Regex.Match(rawKey, @"^(.+)\[[0-9]?\]$");
                    if (arrayCheck.Success)
                    {
                        var key = arrayCheck.Groups[1].Value;
                        // Existing entry for this key, reconstruct object array with this added
                        if (crystalParameters.ContainsKey(key))
                        {
                            var newParameterArray = new object[((object[])crystalParameters[key]).Count() + 1];
                            int i = 0;
                            foreach (object item in (object[])crystalParameters[key])
                            {
                                newParameterArray[i++] = item;
                            }
                            newParameterArray[i++] = (object)value;
                            crystalParameters[key] = (object)newParameterArray;
                        }
                        // New array value
                        else
                            crystalParameters[key] = (object)new object[] { value };
                    }
                    // Discrete value
                    else
                        crystalParameters[rawKey] = (object)parameters[rawKey];
                }

                foreach (string parameter in crystalParameters.Keys)
                {
                    try
                    {
                        this.reportDocument.SetParameterValue(parameter, crystalParameters[parameter]);
                    }
                    catch (Exception ex)
                    {
                        // Ignore invalid parameter exceptions, otherwise throw again
                        if (ex.HResult != -2147352565)
                        {
                            throw ex;
                        }
                    }
                }
            }
        }
private void SetParameters(字符串参数=null)
{
var crystalParameters=新字典();
var parameters=String.IsNullOrEmpty(rawParameters)?null:HttpUtility.ParseQueryString(rawParameters);
if(参数!=null)
{
foreach(parameters.AllKeys中的字符串rawKey)
{
var值=参数[rawKey];
//检查数组值(例如键[0]=值)
var arrayCheck=Regex.Match(rawKey,@“^(+)\[[0-9]?\]$”;
if(arrayCheck.Success)
{
var key=arrayCheck.Groups[1]。值;
//此键的现有项,使用添加的
if(crystalParameters.ContainsKey(键))
{
var newParameterArray=新对象[((对象[])晶体参数[key]).Count()+1];
int i=0;
foreach(对象[])crystalParameters[key]中的对象项)
{
newParameterArray[i++]=项;
}
newParameterArray[i++]=(对象)值;
crystalParameters[key]=(对象)新参数数组;
}
//新数组值
其他的
crystalParameters[key]=(对象)新对象[]{value};
}
//离散值
其他的
crystalParameters[rawKey]=(对象)参数[rawKey];
}
foreach(crystalParameters.Keys中的字符串参数)
{
尝试
{
this.reportDocument.SetParameterValue(参数,crystalParameters[parameter]);
}
捕获(例外情况除外)
{
//忽略无效的参数异常,否则将再次抛出
如果(例如HResult!=-2147352565)
{
掷骰子;
}
}
}
}
}

我测试了几个场景,包括
ReportDocument.SetParameterValue(“,”)
。然而,我解决这个问题的时候,也只有当我删除了这个if条款;将此方法保留为仅在报表没有参数时调用