我也发现类似的问题。
private void BindReport(){
string strProvider = "Server=(local);DataBase=NorthWind;UID=sa;PWD=";
CrystalReport1 oCR= new CrystalReport1();///C:\Inetpub\wwwroot\WebReport1\WebForm1.aspx.cs(52): 找不到类型或命名空间名称“CrystalReport1”(是否缺少 using 指令或程序集引用?)

Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Customers";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"Coustomers");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
是什么原因呢?

解决方案 »

  1.   

    完整代码如下,请耐心帮看一下,谢谢!string sqlStr="";
    if(this.ZXRadioButton.Checked)
    {
    sqlStr="BEGIN  SP_REPORT_HWXSZBZJ(to_date('"+this.FromDateTextBox.Text+
    "','yyyy-mm-dd'),to_date('"+this.ToDateTextBox.Text+"','yyyy-mm-dd'), '"+this.YearTextBox.Text+"' ); END;";
    }
    else if(this.CSRadioButton.Checked)
    {
    sqlStr="BEGIN  SP_REPORT_HWXSZBCS(to_date('"+this.FromDateTextBox.Text+
    "','yyyy-mm-dd'),to_date('"+this.ToDateTextBox.Text+"','yyyy-mm-dd'), '"+this.YearTextBox.Text+"' ); END;";
    }OleDbConnection connO=new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectStringOracle"].ToString());
    OleDbCommand cmdO=new OleDbCommand(sqlStr,connO);connO.Open();
    try
    {
    cmdO.ExecuteNonQuery();
    if(this.ZXRadioButton.Checked)
    {
    sqlStr="SELECT BB_HWXSZBZJ.*,TRUNC(SYSDATE,'DD') TJRQ FROM BB_HWXSZBZJ ORDER BY SERIAL,CXFL";
    }
    else if(this.CSRadioButton.Checked)
    {
    sqlStr="SELECT BB_HWXSZBCS.*,TRUNC(SYSDATE,'DD') TJRQ FROM BB_HWXSZBCS ORDER BY SERIAL,CXFL";
    }
    cmdO.CommandText=sqlStr; OleDbDataAdapter DA=new OleDbDataAdapter(cmdO);
    DataSet DS=new DataSet();
    DA.Fill(DS,"bb_xsqkzbzj"); CRpt_XSQKZBZJ CRRpt=new CRpt_XSQKZBZJ();//CRpt_XSQKZBZJ是我的报表 CRRpt.SetDataSource(DS);
             //若没有这一段则报告登录错误////////////////////////////////////
    TableLogOnInfo logOnInfo = new TableLogOnInfo ();
    logOnInfo.ConnectionInfo.ServerName = "SrvName";
    logOnInfo.ConnectionInfo.UserID = "UserName";
    logOnInfo.ConnectionInfo.Password = "Password"; for (int i=0;i <= CRRpt.Database.Tables.Count - 1;i++)
    {
    CRRpt.Database.Tables [i].ApplyLogOnInfo(logOnInfo);
    }
             //若没有这一段则报告登录错误////////////////////////////////////
    this.CrystalReportViewer1.ReportSource=CRRpt;
    }
    finally
    {
    connO.Close();
    }
      

  2.   

    这个问题不能这样解决,没有必要用DataSet,
    指定水晶表的数据源是存储过程,
    在程序中向水晶表传参数,让水晶表调用存储过程,
      

  3.   

    re: qimini(循序渐进) 
        DS.Tables[0].Rows.Count是0吗?    有数据的。
      

  4.   

    to: Marguess(留侯) 请问如何让水晶报表调用oracle的存储过程呢?
    sqlserver试过是可以的,因为sqlserver储存过程可返回结果集,但oracle则不能,怎样调完过程后再返回结果集呢?谢谢!
      

  5.   

    请改用*.XSD来动态绑定数据。
    设计时指定*.XSD为报表数据源
      

  6.   

    看看
    http://expert.csdn.net/Expert/topic/2174/2174437.xml?temp=.8575251
      

  7.   

    to qimini(循序渐进) :
      谢谢你的回答。
      不过我的问题不是实现动态数据的报表,而是如何让水晶报表运行存储过程,然后从临时表中取数(oracle的临时表,不同session不能共享数据)。或是运行存储过程,然后让水晶报表使用同一个connection取数据。
      请问能够如何实现呢?
      

  8.   

    你可以直接选取存储过程做为数据源啊,在OLEDB里面连接了数据库后,有选择表和存储过程,你选择存储过程就可以了啊!
      

  9.   

    to lxstruggle(lxstruggle) :
      谢谢你的回复。
      oracle的存储过程不能返回结果集,你说的方法适用于sqlserver,但oracle则不行。
      

  10.   

    谢谢wjhs(杰借) 
    自己再up
      

  11.   

    用OracleCommand可以的,抄别人的。我没有用过 :)http://expert.csdn.net/Expert/topic/2238/2238994.xml?temp=.2966272
      

  12.   

    谢谢qimini(循序渐进) 
    先试试。
      

  13.   

    qimini(循序渐进):
     我试过在水晶报表中运行返回游标的ORACLE存储过程,因不知道如何让水晶报表接受游表输出参数,所以直接调用,如下
    DECLARE 
      IN_ACUR PKG_TOOLS.ACUR;
    BEGIN 
      SP_REPORT_HWXSZBZJ_CRPT (to_date('20030901','yyyymmdd'),to_date('20030908','yyyymmdd'), '2003', IN_ACUR );
    END; 但水晶报表报告:不支持!不知道如何让水晶报表接受ORACLE存储过程的游标输出参数呢?谢谢你提供的链接,让我又学到了东东。
      

  14.   

    ok,撇开其他问题不说
    只想问问
    怎样能将数据通过DataSet传给水晶报表?
    有没有谁真的成功地通过DataSet将数据传给水晶报表。这样来测试:
      报表中的查询为select * from atable;
      生成DataSet的查询为 select * from atable where acolumn like '%condition%' 过滤一些纪录。
      看看实际显示的结果是否是第二个查询的结果。我试过了,无论如何都会是第一个查询的结果。请成功过的兄弟姐妹帮帮我,谢谢了!
      

  15.   

    先看看DS.Tables["bb_xsqkzbzj"].Count
    if > 0
    建议你改成CRRpt.SetDataSource(DS.Tables["bb_xsqkzbzj"]);
      

  16.   

    谢谢大家的帮助解决了,如下原来是要先添加一个数据集,即生成一个.xsd文件,绑定到报表,临时new一个dateset是不行的。
    运行过程,生成结果,填充数据集,绑定报表就ok了。若有不明白的,请参看这个例子:http://www.yesky.com/20020618/1616438.shtml结贴