在google上花了3到4个小时试图找到解决问题的方法后,我运气不好。
基本上,我们使用带有sql server后端的.NET应用程序的水晶报告,我们有许多客户端都有自己的服务器,所以我们的报告需要动态设置它们的连接。直到一周前,这个工作正常。但是几天前,客户报告他们正在获取报告的数据库登录提示(只有一个报告,其余的工作正常)。我们很难过,但我们设法在没有安装visual studio或sql server的上网本上重现它。最后,开发人员决定重现该报告,希望在该特定报告中这只是一个奇怪的问题。
不幸的是,今天的新客户也遇到了同样的问题,但这一次是他们所有的水晶报告 - 而且他们也在上网本上工作,所以我们真的很失落。
以下是我们的客户提供的屏幕截图 -
Screenshot http://img404.imageshack.us/img404/1375/loginf.png
以下是我用来在报告中设置连接信息的代码
cI.ServerName = (string)builder["Data Source"];
cI.DatabaseName = (string)builder["Initial Catalog"];
cI.UserID = (string)builder["User ID"];
cI.Password = (string)builder["Password"];
foreach (IConnectionInfo info in cryRpt.DataSourceConnections)
{
info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password);
}
foreach (ReportDocument sub in cryRpt.Subreports)
{
foreach (IConnectionInfo info in sub.DataSourceConnections)
{
info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password);
}
}
一如既往,任何帮助都非常感激。
答案 0 :(得分:2)
问题可能是您设置身份验证信息的方式。您是否考虑过使用ReportDocument.SetDatabaseLogon方法?对报告中的每个唯一数据库连接调用一次。它将无需枚举报告中的所有表格,并且我记得,也需要枚举子报表的表格。
答案 1 :(得分:2)
解决方案发现,结果是客户端用于设置系统的连接构建器没有放入实例名称。相当令人困惑的.net应用程序正常工作。然而,经过整理的水晶报告现在可以完美运行。
感谢您输入Craig。
答案 2 :(得分:0)
寻找类似问题的解决方案让我想到了这个问题。我的问题/解决方案有点不同,但我猜其他人的问题会在这里结束,所以我会在这里发布我的解决方案。
如果您的用户在尝试预览报告时看到类似的内容:
然后在为报告设置SQL Server登录信息时,请确保包含服务名称。因此,例如,确保您提供Crystal“myserver \ myservice”而不仅仅是“myserver”。
我的程序只能使用“myserver”从SQL Server访问数据,但Crystal需要提供“myserver \ myservice”。