IT人
相关图书

Crystal Report & Procedure

所属分类:.NET技术 图表区
-----------------------------------------

用存储过程作数据源创建报表
步骤:
1.编写procedure   (yearConsume)
2.新建dataset,这里使用步骤一创建的存储过程yearConsume
3.新建rpt,数据库字段从ADO.NET数据集中选取存储过程
4.新建aspx页面,并导入CrystalReport Viewer
5.在aspx.cs页面加入代码,代码如下
string strProvider = "Server=(local);DataBase=数据库名称;UID=用户名;PWD=密码";
        SqlConnection myConn = new SqlConnection(strProvider);
        myConn.Open();
        SqlDataAdapter myAdapter = new SqlDataAdapter("yearConsume",myConn);
        //设置命令对象类型为存储过程
        myAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
        myAdapter.SelectCommand.Parameters.Add("@rtYear",SqlDbType.Int,4);
        myAdapter.SelectCommand.Parameters["@rtYear"].Value = "2006";
        DataSet ds = new DataSet();
        myAdapter.Fill(ds,"tblConsumeHead");
        ReportDocument consumeReport = new ReportDocument();
        consumeReport.Load(Server.MapPath("YearConsume.rpt"));
        consumeReport.SetDataSource(ds);
        this.CrystalReportViewer1.ReportSource = consumeReport;
我在运行aspx页面的时候,出现访问报表需要登陆的页面

您请求的报表需要更多信息.
服务器名:    
数据库名:    
用户名:    
密码:    

问题出在哪里呢,请大家帮忙解决。
 
   


----------------------------------------------------------------------

在consumeReport.Load(Server.MapPath("YearConsume.rpt"));后加上如下

    #region 解決登錄錯誤問題
TableLogOnInfo  logonInfo  = new TableLogOnInfo();
foreach( CrystalDecisions.CrystalReports.Engine.Table tb in consumeReport.Database.Tables)
{
logonInfo = tb.LogOnInfo;
logonInfo.ConnectionInfo.ServerName = (local);
logonInfo.ConnectionInfo.DatabaseName = "数据库名称";//
logonInfo.ConnectionInfo.UserID = "用户名";
logonInfo.ConnectionInfo.Password = "密码";
tb.ApplyLogOnInfo(logonInfo);

}
#endregion

--------------------------------------------------------

首先感谢forgot(忘记forgot2000) 在百忙中给我的帮助
我在consumeReport.Load(Server.MapPath("YearConsume.rpt"));后加了你贴出来的代码
    #region 解決登錄錯誤問題
TableLogOnInfo  logonInfo  = new TableLogOnInfo();
foreach( CrystalDecisions.CrystalReports.Engine.Table tb in consumeReport.Database.Tables)
{
logonInfo = tb.LogOnInfo;
logonInfo.ConnectionInfo.ServerName = "(local)";
logonInfo.ConnectionInfo.DatabaseName = "CMSDB";//
logonInfo.ConnectionInfo.UserID = "sa";
logonInfo.ConnectionInfo.Password = "*****";
tb.ApplyLogOnInfo(logonInfo);

}
#endregion

结果发现只有 “(local)”和sa传递给报表了,数据库名称呢和密码则没有。离胜利又近了一步
 (local)  
服务器名:    (local)
数据库名:    
用户名:       (sa)
密码:    


--------------------------------------------------------

问题已经解决,给分!
还是登陆问题
 #region 解決登錄錯誤問題
        TableLogOnInfo logonInfo = new TableLogOnInfo();
        foreach (CrystalDecisions.CrystalReports.Engine.Table tb in consumeReport.Database.Tables)
        {
            logonInfo = tb.LogOnInfo;
            logonInfo.ConnectionInfo.ServerName = "(local)";
            logonInfo.ConnectionInfo.DatabaseName = "数据库名称";
            logonInfo.ConnectionInfo.UserID = "用户名";
            logonInfo.ConnectionInfo.Password = "密码";
            tb.ApplyLogOnInfo(logonInfo);
        }
        #endregion
        consumeReport.SetDataSource(ds.Tables["tblConsumeHead"]);
        //我原来用的是consumeReport.SetDataSource(ds);这里直接导致了“您请求的报表需要更多信息”错误。我存储过程中涉及到一个表,所以我用ds.Tables["tblConsumeHead"],前文中的迭代也可以改成 CrystalDecisions.CrystalReports.Engine.Table tb = consumeReport.Database.Tables[0];(因为一个表格),如果多个表的话,那么consumeReport.SetDataSource()的参数该如何填写,延伸下
相关问题
    Copyright ◎ 1998 - 2007 编程资料网 All Rights Reserved