【问题标题】:Reports no longer run after change from SQL Server 2008 R2 to SQL Server 2014从 SQL Server 2008 R2 更改为 SQL Server 2014 后,报表不再运行
【发布时间】:2017-04-24 12:13:31
【问题描述】:

将后端数据库从 SQL Server 2008 R2 更改为 SQL Server 2014(均为企业版)后,我们的水晶报表不再运行。该数据库于 2008 年备份,并于 2014 年使用 SQL Server Management Studio 恢复。 .Net 应用程序运行良好,但没有运行 Crystal Reports。屏幕只是闪烁,没有生成或交付 PDF。如果我们将 web.config 中的连接字符串更改回原始服务器和数据库,则报告工作正常。下面是为了保护无辜者而更改了 SERVERNAME、DBNAME、USER 和 Password 的连接字符串。唯一改变的是 SERVERNAME。

<add name="Pubs" 
     connectionString="Data Source=SERVERNAME;Initial Catalog=DBNAME;Integrated Security=False;User Id=USER;Password=*********" 
     providerName="System.Data.SqlClient" />

谢谢。

更新:

再次检查后,我现在在 SQL 日志中看到身份验证失败。我不完全确定这些是否来自 Crystal Reports。客户端 IP 是一个完全不同的 IIS 网站 IP,位于同一 Web 服务器上,不应与该数据库通信。

Login failed for user '******'. Reason: Password did not match that for the login provided. [CLIENT: x.x.x.x]
Source Logon
Message
Error: 18456, Severity: 14, State: 8.

更新 #2

开发人员显然发现报告缺少指定用于连接的端口存在一些问题,并且正在查看解决问题的报告。

感谢您的意见。

【问题讨论】:

  • 首先检查用户是否进入SQL Server。如果登录失败,请检查“SQL Server 日志”或“活动监视器”查看用户是否已登录。
  • SQL 日志中没有身份验证错误。我在活动监视器中显示来自前端的有效连接。谢谢。
  • @Wendy - 再次检查后,我现在看到身份验证错误。我用这些信息更新了原始帖子。
  • 能否在 SQL Server 中更新此用户的密码?
  • @Wendy - 是的,我做到了。没变。我还完全更改了 DB 用户密码并更新了所有 web.config 只是为了咧嘴而没有改变。我还尝试使用另一个密码创建一个新的 db_owner 用户,我们得到了相同的结果。我也在等待开发人员的反馈,以验证应用程序中的所有报告都失败了(有数百个)。

标签: sql-server crystal-reports


【解决方案1】:

在从代码调用报告时,开发人员显然发现报告缺少指定用于连接的端口的一些问题。他们正在查看报告并进行更新以解决问题。

开发者输入如下......

不得不更改子报表登录:

rpt.SetDatabaseLogon(sConn.UserID, sConn.Password, sConn.DataSource + ",1433", sConn.InitialCatalog);
            foreach (ReportDocument subReport in rpt.Subreports)
            {
                subReport.SetDatabaseLogon(sConn.UserID, sConn.Password, sConn.DataSource + ",1433", sConn.InitialCatalog);
                for (int i = 0; i < subReport.DataSourceConnections.Count; i++)
                {
                    subReport.DataSourceConnections[i].SetConnection(sConn.DataSource + ",1433", sConn.InitialCatalog, sConn.UserID, sConn.Password);
                    subReport.DataSourceConnections[i].IntegratedSecurity = false;
                }
            }
            for (int i = 0; i < rpt.DataSourceConnections.Count; i++)
            {
                rpt.DataSourceConnections[i].SetConnection(sConn.DataSource + ",1433", sConn.InitialCatalog, sConn.UserID, sConn.Password);
                rpt.DataSourceConnections[i].IntegratedSecurity = false;
            }

到这里:

foreach (IConnectionInfo conn in rpt.DataSourceConnections)
        {
            conn.SetLogon(sConn.UserID, sConn.Password);
            conn.SetConnection(sConn.DataSource + ",1433", sConn.InitialCatalog, false);
        }

        rpt.SetDatabaseLogon(sConn.UserID, sConn.Password);

        foreach (Table t in rpt.Database.Tables)
        {
            t.LogOnInfo.ConnectionInfo.UserID = sConn.UserID;
            t.LogOnInfo.ConnectionInfo.Password = sConn.Password;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多