打印使用 [​​=11=] 存储过程的 Crystal 报表时出错

Error When Printing Crystal Report That Uses SQL Stored Procedure

我创建了一个 Crystal 报告,它使用 SQL 服务器存储过程作为数据源。存储过程只有一个参数。当下面的代码运行时,我在 obj.PrintToPrinter 行得到 "Database logon failed"。

如果我从报表中删除存储过程并将其替换为存储过程中使用的相同表并使用相同的参数,则没有错误。报告打印没有问题!

任何帮助将不胜感激,我真的很想为我们的报告使用存储过程。谢谢!

        ReportDocument obj = new ReportDocument();


        string m_rptname = "C:\Reports\MyReport.rpt";
        obj.Load(m_rptname);

        obj.SetParameterValue(0, "123456");

        foreach (Table tbl in obj.Database.Tables)
        {
            TableLogOnInfo tli = tbl.LogOnInfo;
            tli.ConnectionInfo.ServerName = "myServer";
            tli.ConnectionInfo.UserID = "myUser";
            tli.ConnectionInfo.Password = "myPass";
            tli.ConnectionInfo.DatabaseName = "myDB";

            tbl.ApplyLogOnInfo(tli);
        }

        //The line below is where the error happens for stored proc only
        obj.PrintToPrinter(2, false, 0, 0);
        obj.Close();
        obj.Dispose();

以下是您可能已经尝试过或未尝试过的一些方法...

  1. 为了将问题隔离到 Crystal 报告,您是否尝试编写一个函数来执行直接 SQL 连接的过程?这将允许您测试您的凭据和 SQL 权限。

  2. 我在您的连接设置中没有看到任何关于集成安全性的内容,您可能需要仔细检查一下。由于您传递的是 username/password,我假设您没有使用 Windows 身份验证并且可能需要 Integrated Security = false

  3. 你的报告有子报告吗?如果是这样,您将需要像设置表一样设置连接信息。

  4. 检查您的数据源是否与数据库不同步。要从报表设计器执行此操作,select 数据库 -> 验证数据库。

如果这些选项不起作用,请告诉我,我可以做更多的挖掘工作。 Crystal 将 "gotchas" 排除在外后,报告会很棒。

在某些情况下,验证数据库是不够的。存储过程往往与 Crystal 报告“粘在一起”。添加或更新存储过程时,我通常必须重置数据源位置。这可以在数据库 > 设置数据源位置找到。

看到这个answer