2012-08-06 130 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"); 

我希望这将有助于别人。