寫了個存儲過程,要求接收一個日期參數,然後在報表中顯示出來,但是不知怎樣傳參數?private void FReport2_Load(object sender, EventArgs e)
        {
            ReportDocument RD = new ReportDocument();            RD.Load(Application.StartupPath + "\\CrystalReport5.rpt");
            RD.SetDataSource(client.getDataSet(str5));
            crystalReportViewer1.ReportSource = RD;
            crystalReportViewer1.Show();
        }
注:str5的值是:exe test '2009-05-25'client.getDataSet(str5)); //得到結果集

解决方案 »

  1.   

    str5的值是:exe test '2009-05-25' 是'2009-05-25' 还是 'exe test 2009-05-25' 
      

  2.   

    'exe test 2009-05-25' test 是存儲過程,後面是參數
      

  3.   

    贴一下这个方法client.getDataSet
      

  4.   

    给存储过程传参数是这样
    //构造参数
                SqlParameter[] sqlParameter = {
     new SqlParameter("@Staff_Code",SqlDbType.NVarChar), 
     new SqlParameter("@Staff_Name",SqlDbType.NVarChar), 
     new SqlParameter("@Staff_Password",SqlDbType.NVarChar), 
     new SqlParameter("@Dept_Id",SqlDbType.Int), 
     new SqlParameter("@Dept_Leader",SqlDbType.Int), 
     new SqlParameter("@Re",SqlDbType.NVarChar), 
     new SqlParameter("@Create_Time",SqlDbType.DateTime), 
     new SqlParameter("@Creater",SqlDbType.NVarChar), 
     new SqlParameter("@Flag",SqlDbType.Int), 
     new SqlParameter("@Staff_Id",SqlDbType.Int),            };            //为参数传值
                int i = 0;
                sqlParameter[i++].Value = info.Staff_Code;
                sqlParameter[i++].Value = info.Staff_Name;
                sqlParameter[i++].Value = info.Staff_Password;
                sqlParameter[i++].Value = info.Dept_Id;
                sqlParameter[i++].Value = info.Dept_Leader;
                sqlParameter[i++].Value = info.Re;
                sqlParameter[i++].Value = info.Create_Time;
                sqlParameter[i++].Value = info.Creater;
                sqlParameter[i++].Value = info.Flag;
                sqlParameter[i++].Value = info.Staff_Id;
    给水晶报表传参数是这样
    this.CrystalReportSource1.ReportDocument.SetParameterValue("参数名", "参数值");
      

  5.   

    原理就如5楼所讲,先取得存储过程里的数据集,并把数据集给报表
    我们假设你的代码,已经可以正常运行,并且报表能展现了,只是缺个“日期參數”在报表中实际展现出来。在你现有报表的基础上,增加一个参数,假设叫x1,string型
    代码中增加一行private void FReport2_Load(object sender, EventArgs e) 
            { 
                ReportDocument RD = new ReportDocument();             RD.Load(Application.StartupPath + "\\CrystalReport5.rpt"); 
                RD.SetDataSource(client.getDataSet(str5));
                RD.SetParameterValue("x1", "2009-05-05"); 
                crystalReportViewer1.ReportSource = RD; 
                crystalReportViewer1.Show(); 
            } 
      

  6.   

    為什麼會報錯? 
    public DataSet getDataSet(SqlCommand command) 

    aa = new SQL_Manager(); 
    aa.conn.Open(); 
    adapter = aa.getAdapter(command); 
    ds = new DataSet(); 
    adapter.Fill(ds);//這報錯 
    return ds; 
    }運行報錯:程序 'test' 預期使用未提供的參數 '@year_current'。private void FReport2_Load(object sender, EventArgs e) 
            { 
                ReportDocument RD = new ReportDocument();             RD.Load(Application.StartupPath + "\\CrystalReport5.rpt"); 
                RD.SetDataSource(client.getDataSet(str5)); 
                RD.SetParameterValue("@year_current", "2009-05-05"); 
                crystalReportViewer1.ReportSource = RD; 
                crystalReportViewer1.Show(); 
            } 
      

  7.   

    如果调用存储过程返回dataset,参考下
    http://www.cnblogs.com/tiu/archive/2006/10/16/530647.aspx
      

  8.   

    我照你說的做了,但是還是會報錯啊,真郁悶,我通過報表專家增加了一個參數@year_current datetime,但運行總報錯:程序 'test' 預期使用未提供的參數 '@year_current'。
    這個怎麽辦啊?
      

  9.   

    adapter.Fill(ds);//這報錯 你的报错信息跟水晶报表没关系。
    你先要看一下你的存储过程为什么不能返回数据集,不要管水晶报表部分。你自己封装好的
    aa = new SQL_Manager(); 
    aa.conn.Open(); 
    adapter = aa.getAdapter(command); 这个部分,是不是有问题?
      

  10.   

    在此謝謝babyt了,你的資料給了我很大啟發,我想基本上沒什麼大問題了,送40分,同時llsen也提供了路子,10分給你了謝謝,別嫌少啊!