2012-08-06 184 views
2

我需要一些幫助。Crystal Reports和登錄問題

其實,我已經讀過關於這個問題,我認爲我已經解決了它,但它一直困擾着我。

這是關於不同登錄在開發和生產環境。

這應該是解決方案(EF和SQL Server):

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder((model.Connection as EntityConnection).StoreConnection.ConnectionString); 

ConnectionInfo ci = new ConnectionInfo(); 

ci.ServerName = builder.DataSource; 
ci.DatabaseName = builder.InitialCatalog; 
ci.UserID = builder.UserID; 
ci.Password = builder.Password; 

report.SetDatabaseLogon(ci.UserID, ci.Password, builder.DataSource, ci.DatabaseName); 

foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in report.Database.Tables) 
{ 
    TableLogOnInfo logon = tbl.LogOnInfo; 
    logon.ConnectionInfo = ci; 
    tbl.ApplyLogOnInfo(logon); 
} 

我從實體連接提取登錄信息,並將其應用到報告中的所有表。這應該夠了吧。我只添加SetDatabaseLogon()以確保,但這不是必需的。

現在,當我在生產環境中運行報表時,報表彈出一個顯示CORRECT服務器名稱(生產服務器)的數據庫登錄屏幕,數據庫旁邊沒有任何東西(這是我關心的),正確的用戶名和無密碼,要求輸入登錄信息。

我輸入它,但CR表示「登錄失敗,請重試」。我的意思是WTF。我使用完全相同的憑證通過Management Studio連接到數據庫。

我正在使用WPF查看器,順便說一句。

我真的被困在這裏,我做了一些調試,連接信息獲取所有正確的數據,所以它必須是報告誰是罪魁禍首,但我該怎麼辦?

任何幫助,將不勝感激。我希望有人在我面前遇到同樣的問題。

問候

回答

1

望着,做同樣的工作在我Blog Post的代碼,我可以看到一些區別:

  • 設置tbl.Location本身(這可能是重新初始化一些內部 - 它沒沒有它就沒有工作)。
  • 擺在那,你可以重新調用來處理子報表的方法代碼:
  • 我的版本永遠需要調用report.SetDatabaseLogon

除此之外,他們基本上是相同的。

代碼:

void SetConnection(ReportDocument rd, crConnectionInfo ci) 
{ 

    foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in rd.Database.Tables) 
    { 
     TableLogOnInfo logon = tbl.LogOnInfo; 
     logon.ConnectionInfo = ci; 
     tbl.ApplyLogOnInfo(logon); 
     tbl.Location = tbl.Location; 
    } 
    if (!rd.IsSubReport) { 
     foreach {ReportDocument sd in rd.SubReports) { 
      SetConnection(sd,ci) 
     } 
    } 
} 

(注:只需手工編碼的這一點,所以檢查一下你使用它之前)。

這適用於VS2008版本的水晶報告(忘記它被稱爲)。

編輯:還有一兩件事,在我的連接初始化,有幾個額外的屬性設定:

ci.Type = ConnectionInfoType.SQL; 
ci.IntegratedSecurity = false; 
+0

謝謝,喬恩。很少有好的指針。我會嘗試他們,並讓你知道它是否對我有幫助。 – 2012-08-06 09:39:34

0

這是完全愚蠢的問題,我偶然解決它。在我的臺式電腦上安裝水晶報表是歪曲的,所以無論何時我使用數據庫專家編輯某些東西(例如添加一些表格),它都會破壞我的報告。我所做的只是在我的筆記本電腦上使用「設置數據庫位置」選項,現在我的報告完美無瑕。

+0

你能詳細解釋一下如何解決它嗎? 我有同樣的問題在http://stackoverflow.com/questions/42059906/c-sharp-crystal-report-on-pc-client-always-asking-login-prompt-sql-server – Chielarck 2017-02-06 04:22:36

1

我有一個問題,使用 「SetDatabaseLogon」

我改由

report.DataSourceConnections[0].SetConnection("Servername","InitialCatalog", "UserID", "Password"); 

我希望這將有助於別人。