Crystal Report登录失败问题

时间:2011-06-21 14:29:19

标签: c# asp.net crystal-reports

我正在使用....

Framework 3.5 C#Visual Studio 2008和基于Web的应用程序

我使用数据集创建了报告,即我的服务为我提供了数据集,并且我将该数据集与报告绑定在一起。

但有时CR查看器开始弹出错误“登录失败”,登录信息集名称填写登录信息。

我正在寻找它的解决方案很长一段时间,但对此没有任何合适的答案。

5 个答案:

答案 0 :(得分:3)

您是否在代码中传递了凭据:

ReportDocument rep = new ReportDocument();
rep.FileName = Server.MapPath("CrystalReport1.rpt");
set.SetDatabaseLogon("username", "password", "sql-server", "database"); // this line pass the login parameters required for login

答案 1 :(得分:3)

遗憾的是,这个错误含糊不清,因为它是数十个无关问题的生成错误。在这种情况下,“登录失败”可能是由于偶尔的架构不匹配造成的。

DataSet对象可以包含分层数据。 如果您的服务返回包含分层数据的DataSet,并且某些子项丢失,则其架构已有效更改。

有几种方法可以确保DataSet具有匹配的架构。如果要将对象序列化为XML,然后从该XML生成DataSet,那么实现一致架构的一种简单方法是从以下位置更改代码:

reportData.ReadXml(new MemoryStream(Encoding.UTF8.GetBytes(reportXml)));

reportData.ReadXmlSchema(schemaPath);
reportData.ReadXml(
        new MemoryStream(Encoding.UTF8.GetBytes(reportXml)),
        XmlReadMode.IgnoreSchema
    );

其中,schemaPath指向通过调用

在开发中生成的XSD文件
File.WriteAllText(
        @"C:\MyTempPath\MyReportName.xsd", 
        reportData.GetXmlSchema(), 
        Encoding.Unicode
    );

生成模式时,您还希望该模式尽可能完整地表示数据,因此您需要尽可能使用完整的数据层次结构。这也是必须创建报告以使其模式匹配的XML。如果架构发生更改,则必须在设计器中使用新数据打开报表,并且必须“验证数据库”,然后保存RPT文件。

答案 2 :(得分:2)

经过长时间的努力,我想到了主要原因,我的存储过程中存在一个错误,即返回数据。

SP从table1或table2返回数据(它们都具有相同的结构),但是当我从table2中选择数据时,我没有写出所需的所有列名。

看起来很奇怪,我应该得到像找不到列错误而不是数据库登录失败的东西。

答案 3 :(得分:1)

试一试。还要确保在所有地方都有正确版本的水晶报告

private ConnectionInfo crConnectionInfo = new ConnectionInfo();
        ReportDocument rpt = new ReportDocument();
        protected void Page_Load(object sender, EventArgs e)
        {
            CrystalReportViewer1.Width = 900;
            CrystalReportViewer1.ToolPanelView = ToolPanelViewType.None;
            BindReport();
        }

        private void BindReport()
        {

            rpt.Load(Server.MapPath("ProductList.rpt"));
            DataSet ds = getReportData();
            rpt.SetDataSource(ds.Tables[0]);
            CrystalReportViewer1.ReportSource = rpt;
        }

        private DataSet getReportData()
        {
            DataSet ds = new DataSet();
            string ConnectionString = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
            SqlConnection con = new SqlConnection(ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "GetProductList";
            cmd.CommandType = CommandType.StoredProcedure;            
            con.Open();
            cmd.Connection = con;
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds, "ctable");
            con.Close();
            return ds;
        }

答案 4 :(得分:1)

当我将应用程序从开发机器移动到真实服务器时,当时我遇到了同样的问题。它是一个IIS7 MVC应用程序(CR 13.0),具有对SQL服务器的可信身份验证。

我修复它的方法是为应用程序创建一个新的应用程序池。我将新应用程序池用户IIS APPPOOL\applicationpoolname的权限授予应用程序中使用的SQL Server数据库。 然后错误就消失了。

我的假设是,CR运行时并不总是使用通过代码应用的userlogininfo,而是使用IIS用户登录信息。