我用下面的程序向水晶报表中的存储过程传递参数,但是结果却总是显示的是我在将存储过程加入到水晶报表的可用字段时所最初赋予的值。我的程序如下:
在前面添加using crystaldescions.shared
程序:
button_click()
{
ParameterFields pfs=new ParameterFields();ParameterField pf=new ParameterField();
ParameterDiscreteValue pfv=new ParameterDiscreteValue();
pf.ParameterFieldName="@nian";
pfv.Value=2004;
pf.CurrentValues.Add(pfv);
pfs.Add(pf);ParameterField pf1=new ParameterField();
ParameterDiscreteValue pfv1=new ParameterDiscreteValue();
pf1.ParameterFieldName="@yue";
pfv1.Value=7;
pf1.CurrentValues.Add(pfv1);
pfs.Add(pf);CrystalReportViewer1.ParameterFieldInfo=pfs;CrystalReportViewer1.ReportSource="c:\\interpub\\wwwroot\\test9\\CrystalReport1.rpt";(我在前面的属性中已经绑定了该项,但在万般无奈的情况下在这里又加上了这项)
CrystalReportViewer1.DataBind();
}
之所以认为没有将参数传入的原因,除了上面所说的情况外(最初赋值为@nian=2004,@yue=8),CrystalReportViewer1.parameterFieldInfo[0]或[1],和CrystalReportView1.ParameterFieldInfo.Contain(2004)和CrystalReportView1.ParameterFieldInfo.indexof(2004)时,分别得到false和-1;我的存储过程如下:
create procedure 回采1 @nian int,@yue int
as
select sum(ymDrcl)
from ymscjbxxb
where (year(ymScrq)=@nian and 
       month(ymScrq)=@yue and
       day(ymScrq)<=25) or
      (year(ymScrq)=@nian and 
       month(ymScrq)= @yue-1 and
       day(ymScrq)<=31 and day(ymScrq)>25)
我是按照网上给水晶报表的存储过程参数传递数值的例子写的啊,是前面没有设置好的原因吗?
     顺便问一下,在网上给水晶报表的存储过程参数传递数值的例子中,ParameterFieldName等于的都是“NA”之类的参数名,而不是"@参数名"的形式,在存储过程中的参数不都是"@参数名"的形式吗,那网上例子为什么会这么表示呢?

解决方案 »

  1.   


    是不是由于你的存储过程起的是中文名
    create procedure 回采1 @nian int,@yue int
    as
    select sum(ymDrcl)
    from ymscjbxxb
    where (year(ymScrq)=@nian and 
           month(ymScrq)=@yue and
           day(ymScrq)<=25) or
          (year(ymScrq)=@nian and 
           month(ymScrq)= @yue-1 and
           day(ymScrq)<=31 and day(ymScrq)>25)
      

  2.   

    //填充水晶报表参数
    public void FillReportParameter(CrystalDecisions.Windows.Forms.CrystalReportViewer crViewer)
    {
    ParameterFields paramFields = new ParameterFields (); ParameterField paramField;
    ParameterDiscreteValue discreteVal; //这是离散性的参数 paramField= new ParameterField();
    discreteVal= new ParameterDiscreteValue();
    paramField.ParameterFieldName = "Company";
    discreteVal.Value = COMPANY;// 设置值并将其传递给该参数。
    paramField.CurrentValues.Add (discreteVal);
    paramFields.Add (paramField);// 将该参数添加到参数字段集合。 paramField= new ParameterField();
    discreteVal= new ParameterDiscreteValue();
    paramField.ParameterFieldName = "ReportDate";
    discreteVal.Value = Report_StartDate+" 至 "+Report_EndDate;// 设置值并将其传递给该参数。
    paramField.CurrentValues.Add (discreteVal);
    paramFields.Add (paramField);// 将该参数添加到参数字段集合。 paramField= new ParameterField();
    discreteVal= new ParameterDiscreteValue();
    paramField.ParameterFieldName ="ReportType" ;
    discreteVal.Value = REPORTTYPE;// 设置值并将其传递给该参数。
    paramField.CurrentValues.Add (discreteVal);
    paramFields.Add (paramField);// 将该参数添加到参数字段集合。 crViewer.ParameterFieldInfo = paramFields;
    } 这是我的代码,完全可以的
      

  3.   

    buaawjh(猪猪爱咬咬):
     你在前面的水晶报表设计器中而外设置了什么了吗?我用的是pull方式,你也是用这个吗?另外,你的parameterfieldname的名字怎么都不是"@参数名"的形式,在存储过程中的参数不都是"@参数名"的形式吗,是不是我这里出错了
      

  4.   

    goody9807() :
       应该没有关系,我这个存储过程用来编写别的程序时没出现过什么问题