各位大虾,我在PUSH方式将数据正确显示到了水晶报表中,在将水晶报表导出在服务器上一个目录时,点击一个”导出“按钮,用代码将其导出成EXCEL或WORD时,老是出现烦人的“登录失败!“,我一开始用的是net2003自带的 水晶报表9.1.5,然后,再换成水晶报表10,也是一样问题,在网上找了一下关于”登录失败“的问题,都是谈的PULL方式下水晶报表导出问题,难道没有人能解决PUSH方式下将水晶报表导出时出现“登录失败”嘛?(请不要谈PULL方式)

解决方案 »

  1.   

    http://blog.csdn.net/goody9807/articles/138822.aspx
      

  2.   

    我用的和你一样的方式,好像没有遇到你的这种情况!
    是不是代码有问题啊?
    PUSH 模式设置了 TableLogOnInfo,不需要!
    因为数据源是 DataSet,不是数据库!
      

  3.   

    这个统计页面的代码:
    protected System.Web.UI.WebControls.Button btnExit;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.DropDownList ddlb_dwmc;
    protected System.Web.UI.WebControls.Button btnLocate;
    private string cn=System.Configuration.ConfigurationSettings.AppSettings.Get("oracleConnection1.ConnectionString");
       
    //根据水晶报表定义一个水晶报表变量
            
    ywDayReport myReport = new ywDayReport();

    ExportOptions crExportOptions = new ExportOptions();

    DiskFileDestinationOptions crDiskFileDestinationOptions;

           //根据数据集定义一个变量
              ywreport myReportset = new ywreport(); protected System.Web.UI.WebControls.Button btnShow;
    protected System.Web.UI.WebControls.TextBox txbsj1;
    protected System.Web.UI.WebControls.TextBox txbsj2;
    protected System.Web.UI.WebControls.DropDownList ddlb_type;
    protected System.Web.UI.WebControls.Button btnExport;
    protected Dundas.Charting.WebControl.Chart Chart1;
    protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
    protected System.Web.UI.WebControls.Button btnfxt;
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(((clsUser)Session["objUser"])==null)
    {
    Page.RegisterStartupScript("alert", "<script language=javascript>alert('登陆超时,请重新登陆!');   window.parent.location='../Login.aspx';</script>");
    return;
    } if(!IsPostBack)
    {
                   //填充单位名称
    string s_sql = " select dwbm_bm,dwbm_mc from user_dwbm where dqbh ='" +((clsUser)Session["objUser"]).Dqbh +"' and user_name='"+((clsUser)Session["objUser"]).UserName+"' order by dwbm_bm ";
    OracleDataAdapter myAdapter=new OracleDataAdapter(s_sql,cn);
    DataSet mySet=new DataSet();
    myAdapter.Fill(mySet); ddlb_dwmc.DataTextField ="dwbm_mc";
    ddlb_dwmc.DataValueField ="dwbm_bm"; ddlb_dwmc.DataSource = mySet;
    ddlb_dwmc.DataBind(); ddlb_dwmc.Items.Insert(0,"==请选择支局==");
    ddlb_dwmc.Items[0].Value="";

    myAdapter.Dispose();
    mySet.Dispose();

    //用当前日期来填充txbsj1 txbsj2
                     string du_year = DateTime.Today.Year.ToString().Trim();
     string du_month =DateTime.Today.Month.ToString().Trim();
     string du_day = DateTime.Today.Day.ToString().Trim(); if(du_month.Length ==1)
    du_month ="0" +du_month;
    if(du_day.Length==1)
    du_day ="0"+ du_day; this.txbsj1.Text = du_year+"-"+du_month +"-"+du_day;
    this.txbsj2.Text = du_year+"-"+du_month +"-"+du_day; this.ddlb_type.Items.Insert(0,"==请选择导出格式==");
    this.ddlb_type.Items[0].Value=""; this.ddlb_type.Items.Insert(1,"Rich Text格式 (RTF)");
    this.ddlb_type.Items[1].Value="Rich Text格式 (RTF)";
    this.ddlb_type.Items.Insert(1,"Portable Document格式 (PDF)");
    this.ddlb_type.Items[1].Value="Portable Document格式 (PDF)";

    this.ddlb_type.Items.Insert(2,"MS Word文档 (DOC)");
    this.ddlb_type.Items[2].Value="MS Word文档 (DOC)"; this.ddlb_type.Items.Insert(3,"MS Excel电子表格 (XLS)");
    this.ddlb_type.Items[3].Value="MS Excel电子表格 (XLS)"; this.ddlb_type.Items.Insert(4,"Crystal Report水晶报表 (RPT)");
    this.ddlb_type.Items[4].Value="Crystal Report水晶报表 (RPT)"; this.ddlb_type.Items.Insert(5,"HTML 4.0网页 (HTML)");
    this.ddlb_type.Items[5].Value="HTML 4.0网页 (HTML)";            
    }
      

  4.   

     s_sql =" select dwbm_mc,mc1,mc2,mc3,bz1,bz2,bz3,rq1,rq2,pageid,je1,je2,je3,je4,je5,je6  from ywfxb where yw_year='" + du_year +
    "' and yw_month='" +du_month +"' and yw_day='"+du_day +"' and dqbh ='" +((clsUser)Session["objUser"]).Dqbh +"'  and clrid='" + ((clsUser)Session["objUser"]).UserId +"' order by xh"; OracleDataAdapter myAdapter = new OracleDataAdapter(s_sql,myConnection);
    DataSet mySet = new DataSet();
    myAdapter.Fill(mySet); int i =0,j =0;
    int fang_rows =0,fang_cols =0;
    fang_rows = mySet.Tables[0].Rows.Count;
    fang_cols = mySet.Tables[0].Columns.Count;
    DataRow myRow = myReportset.Tables["ywdayreport"].NewRow();
    for(i=0;i<fang_rows;i++)
    {
    for(j=0;j<fang_cols;j++)
    {
    myRow[j] = mySet.Tables[0].Rows[i][j];
    } myReportset.Tables["ywdayreport"].Rows.Add(myRow);
    myRow = myReportset.Tables["ywdayreport"].NewRow(); } //在这里应注意的是myReport.SetDataSource(fangset)用来填充水晶报表变量的DataSet中只能有一个数据表
    //否则就会出现“登录失败!!!”很难查出是什么原因!!!!!
    //
    DataTable mytable = myReportset.Tables["ywdayreport"];
    myReportset.Tables.Clear();
    DataSet fangset = new DataSet();
    fangset.Tables.Add(mytable);

                 
       myReport.SetDataSource(fangset);
      

    CrystalReportViewer1.ReportSource=myReport;//设置报表数据源
               
    myAdapter.Dispose();
    myConnection.Dispose();

    myCommand.Dispose();           this.btnShow.Enabled = true;
    } private void ExportReport(string fang_bz)
    {
    string ExportPath;
    ExportPath = Request.PhysicalApplicationPath + "Exported\\";
    if (Directory.Exists(ExportPath) == false) Directory.CreateDirectory(Request.PhysicalApplicationPath + "Exported\\"); crDiskFileDestinationOptions = new DiskFileDestinationOptions();
    //crExportOptions = myReport.ExportOptions;
                // crExportOptions = myReport.ReportOptions;   
    crDiskFileDestinationOptions.DiskFileName = ExportPath + "Excel.xls"; //set the required report ExportOptions properties
    crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
    crExportOptions.ExportFormatType = ExportFormatType.Excel;
    crExportOptions.DestinationOptions = crDiskFileDestinationOptions; try
    {
    myReport.Export();
    }
    catch (Exception err)
    {
    Response.Write("<BR>");
    Response.Write("<script language ='javascript'>"); string fang_err = "alert('导出失败-- " + err.Message.ToString().Trim() +"')"; Response.Write(fang_err);
    Response.Write("</script>"); Response.Write(err.Message.ToString());
    }
    } private void btnExport_Click(object sender, System.EventArgs e)
    {

    if( this.ddlb_type.SelectedItem.Text=="==请选择导出格式==" )
    {
    Page.RegisterStartupScript("alert", "<script language=javascript>alert('请选择导出格式!');</script>");
    return;
    }
    //fang_bz在这里作年+月+部门
    string fang_bz = ((clsUser)Session["objUser"]).UserId+"-"+((clsUser)Session["objUser"]).Dqbh+"-";

    // string fang_bz ="部门预算分析表一";
    ExportReport(fang_bz);
      

  5.   

    1未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。其他信息: 系统错误。
    原因 因为数据结构不一至
    例如 :
    law ds=new law();//law为数据集
    this.conn.Open();
    SqlDataAdapter da=new SqlDataAdapter("select * from bbb",conn);//bbb是我故意写错的,原本应该
                                         连接LAW表,现在连接BBB表
    da.Fill(ds,"lawa");//(lawa)是一个element)--》到这就出错了,以为所读取的数据结构跟要填充的  
                                                 表结构不一至。
    当然如果你读取的数据(表读对了),依然出现这个问题那就是你的数据库中的表结构跟你XSD的element
    不相同,所以也会出错
    2未处理的“CrystalDecisions.CrystalReports.Engine.LoadSaveReportException”类型的异常出现在 crystaldecisions.crystalreports.engine.dll 中。其他信息: 加载报表失败。
    原因 提示的很清楚没有加载报表
    例如
    如果是在C/S模式下用
    repDoc.Load(Request.PhysicalApplicationPath+"\\"+"lawshow.rpt");//B/S调用方法当然出错
    一般是到repDoc.Refresh();就报错
    改为
    repDoc.Load(Application.StartupPath +"\\"+"lawshow.rpt");就没有问题了
    当然还有一个问题就是C/S模式的输入路径问题
    C/S默认输出路径是bin/下而Application.StartupPath是访问程序的根目录,当然找不到报表
    也就会出错拉
      

  6.   

    我怎么感觉你的程序写的有点太复杂了!下面是我的程序        Dim rpt As New newjlgis.sd_yxdc()      '定义rpt为一个报表对象,sd_yxdc是一个rpt的类
            Dim conn As New OleDb.OleDbConnection()
            Dim cmd As New OleDb.OleDbCommand()
            Dim da As New OleDb.OleDbDataAdapter()
            Dim ds As New Data.DataSet()        conn.ConnectionString = Application("conn_string")         '连接字符串
            cmd.Connection = conn
            cmd.CommandText = "select * from test"
            da.SelectCommand = cmd
            conn.Open()
            da.Fill(ds, "rpt_data")
            conn.Close()
            conn = Nothing        rpt.SetDataSource(ds.Tables("rpt_data"))
            Me.CrystalReportViewer1.ReportSource = rpt
      

  7.   

    Dim diskOpts As New DiskFileDestinationOptions()
            Dim filePath As String        filePath = Server.MapPath(Request.ApplicationPath) & "\reports\sd_yxdc.doc"
            diskOpts.DiskFileName = filePath
            
            rpt.ExportOptions.ExportFormatType = ExportFormatType.WordForWindows
            rpt.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
            rpt.ExportOptions.DestinationOptions = diskOpts
            rpt.Export()
           
            Dim js As String
            js = "<script language=javascript>window.open('sd_yxdc.doc','report','dependent=1,menubar=1,scrollbars=1,toolbar=1,status=1,titlebar=1,resizable=1')</script>"
            Page.RegisterStartupScript("key1", js)