C# Crystal Reports数据库登录失败

C# Crystal Reports数据库登录失败,c#,.net,visual-studio-2008,crystal-reports,reporting,C#,.net,Visual Studio 2008,Crystal Reports,Reporting,在谷歌上花了3到4个小时试图找到解决我问题的方法之后,我的运气不太好 基本上,我们将crystal reports用于带有sql server后端的.NET应用程序,我们有许多客户端,每个客户端都有自己的服务器,因此我们的报表需要动态设置它们的连接。直到一周前,这一切都很顺利。然而,几天前,一位客户报告说,他们收到了一个报告的数据库登录提示(只有一个报告,其余的工作正常)。我们被难住了,但我们设法在一台没有安装visual studio或sql server的上网本上复制了它。最后,开发人员决定

在谷歌上花了3到4个小时试图找到解决我问题的方法之后,我的运气不太好

基本上,我们将crystal reports用于带有sql server后端的.NET应用程序,我们有许多客户端,每个客户端都有自己的服务器,因此我们的报表需要动态设置它们的连接。直到一周前,这一切都很顺利。然而,几天前,一位客户报告说,他们收到了一个报告的数据库登录提示(只有一个报告,其余的工作正常)。我们被难住了,但我们设法在一台没有安装visual studio或sql server的上网本上复制了它。最后,开发人员决定复制该报告,希望这只是该报告中的一个奇怪之处

不幸的是,今天的一个新客户也遇到了同样的问题,但这一次,他们的每一份crystal报告都出现了——而且他们还在上网本上工作,所以我们在这里真的很迷茫

下面是我们的客户看到的屏幕截图-

下面是我用来在报告中设置连接信息的代码

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

一如既往,非常感谢您的帮助。

也许问题在于您设置身份验证信息的方式。你考虑过使用这种方法吗?为报告中的每个唯一DB连接调用一次。它将不再需要枚举报表中的所有表,而且,我记得,也不再需要枚举子报表的表。

解决方案找到后,发现客户端用于设置其系统的连接生成器没有放入实例名称。相当令人困惑的是,.net应用程序在这样的情况下运行良好。然而,有了这一点,分类水晶报告现在可以完美地工作了


感谢您的意见,Craig。

搜索类似问题的解决方案使我想到了这个问题。我的问题/解决方案有点不同,但我猜其他有我问题的人会在这里结束,所以我将在这里发布我的解决方案

如果您的用户在尝试预览报表时看到类似的情况:

然后,在为报表设置SQL Server登录信息时,请确保包含服务名称。因此,例如,确保给Crystal的是“myserver\myservice”,而不仅仅是“myserver”


我的程序仅使用“myserver”就可以访问SQL Server中的数据,但Crystal需要获得“myserver\myservice”。

我尝试了您的建议,但测试中仍然出现相同的错误-但是,现在它在登录提示中获得了数据库名称。如果我尝试输入正确的密码,仍然会失败。是否设置了dataase字段?如果在报告提示时提供了正确的登录凭据,报告是否按预期工作?如果将值硬编码到SetDatabaseLogon,如reportDocument.SetDatabaseLogon(“帐户”、“密码”、“数据库”、“服务器”)中,是否工作?要确保子报表的登录信息已设置,请将此位也添加到子报表循环中。让我知道它是如何工作的,我们将尝试下一个测试。同样的过程在其他客户机环境中工作得非常好-因此我怀疑这与驱动程序/他们设置SQL server的方式有关。但除此之外,我还被难住了。如果我在提示中输入了正确的详细信息,我会收到一条连接失败的消息。我面临着类似的问题。您能告诉我您在这里和代码中使用连接生成器是什么意思吗?谢谢