string connStr = ConfigurationSettings.AppSettings["lj"].ToString();  //从web.cofig获取连接字符
        SqlDataSource datasource = new SqlDataSource(connStr, "select * from yang");
        ReportDocument doc = new ReportDocument();
        TableLogOnInfo logininfo = new TableLogOnInfo();
        string path;        
        path = Server.MapPath("report1.rpt");
        doc.Load(path);
        //a, b, c, d从web.cofig获取强制连接的服务器,库,用户,密码,主要用来强制连接
        string a, b, c, d;
        a = System.Configuration.ConfigurationManager.AppSettings[0];
        b = System.Configuration.ConfigurationManager.AppSettings[1];
        c = System.Configuration.ConfigurationManager.AppSettings[2];
        d = System.Configuration.ConfigurationManager.AppSettings[3];
        logininfo.ConnectionInfo.ServerName = a;
        logininfo.ConnectionInfo.DatabaseName = b;
        logininfo.ConnectionInfo.UserID = c;
        logininfo.ConnectionInfo.Password = d;        try
        {
            doc.Database.Tables[0].ApplyLogOnInfo(logininfo);
            doc.Database.Tables[0].SetDataSource(datasource.Select(DataSourceSelectArguments.Empty));
            CrystalReportViewer1.ReportSource = doc;
        }
        catch
        {
            Response.Write("<script>alert('输出报表失败,请检查输入信息或网络!');</script>");
        }参考一下。那个登陆主要是强制连接数据库试试。那代码可以加到你的代码里。

解决方案 »

  1.   

    我是通过向导创建一个报表的(初学),然后把ReportDocument Report = new ReportDocument();
    Report.Load(Server.MapPath("CrystalReport1.rpt"));
    //设置按名称指定的表的 TableLogOnInfo 对象。 
    TableLogOnInfo logOnInfo = new TableLogOnInfo(); //对报表中的每个表进行循环
    //报表中数据集的Table 对象的个数
    for(int i=0;i<Report.Database.Tables.Count;i++)
    {
    // 为报表中的表设置连接信息。
         
    // 设置服务器或 ODBC 数据源名称、数据库名称、
    logOnInfo.ConnectionInfo.ServerName = "(local)";
    logOnInfo.ConnectionInfo.DatabaseName = "cnet"; logOnInfo.ConnectionInfo.UserID = "sa";
    logOnInfo.ConnectionInfo.Password = "821217";
    Report.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
    }
    rptvew.ReportSource = Report;

    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    this.rptvew.DataBind();
    base.OnInit(e);
    }
      

  2.   

    加载的问题。 为什么 1  楼这么快 就回答了
    我的方法 是 不用密码 
    CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
            CrystalReportSource1.DataBind();
            CrystalReportViewer1.ReportSource = CrystalReportSource1;
            CrystalReportSource1.DataBind()
    呵呵 简单好用
      

  3.   

    我觉的加载方法应该没有问题,我换成ACCESS数据库的话就不会出现问题,但是改成MSSQL然后用ODBC数据源的方式就出现登陆失败问题