2017-04-24 36 views
0

將後端數據庫從SQL Server 2008r2更改爲SQL Server 2014r2(均爲企業版)後,我們的Crystal報告不再運行。該數據庫在2008年進行了備份,並在2014年使用SQL Management Studio進行了恢復。 .Net應用程序工作正常,除了沒有運行水晶報表。屏幕閃爍,不生成或傳送PDF。如果我們將web.config中的連接字符串更改回原始服務器和數據庫,則報告正常工作。下面是連接字符串與SERVERNAME,DBNAME,USER和密碼的變化,以保護無辜。唯一被改變的是SERVERNAME。從SQL 2008r2更改爲SQL 2014r2後不再運行報告

<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是在同一個Web服務器上完全不同的IIS網站IP,不應該與此數據庫交談。

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 開發商顯然發現連接被指定的一些問題,缺乏一個端口的報告,並正在經歷解決問題的報告。

感謝您的意見。

+0

首先檢查用戶是否獲得在SQL Server與否。如果登錄失敗,請檢查'SQL Server日誌'或'活動監視器'查看用戶是否已進入。 – Wendy

+0

SQL日誌中沒有認證錯誤。我在活動監視器中顯示來自前端的有效連接。謝謝。 – T3chDad

+0

@ Wendy - 再次檢查後,我現在看到auth錯誤。我使用這些信息更新了原始帖子。 – T3chDad

回答

0

開發人員在從代碼調用報表時,顯然發現一些報告缺少端口被指定用於連接。他們正在閱讀報告並進行更新以解決問題。

開發輸入如下....

後來換子報表登錄:

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; 
     }