我正在使用水晶报告生成我的报告 对于我的报告,我想附加图像,其名称存储在数据库中 我试图从数据库中获取图像名称,将其存储在数据集表中,并从数据库所需的视图中获取其他信息。
但在生成报告的pdf时(导出时)会出现以下错误 -
"类型的例外 ' CrystalDecisions.CrystalReports.Engine.LogOnException'发生在 CrystalDecisions.ReportAppServer.DataSetConversion.dll但不是 在用户代码中处理数据库登录失败。"
它有任何解决方案......
答案 0 :(得分:0)
显然数据库登录失败可能是很多不同的事情,并不是所有与数据库登录相关的事情,所以我怀疑它不可能只从你的描述中诊断出来。
我建议你从这里开始:
如果链接中断,请在此处添加文章:
简介
他的“使用Crystal Reports排除数据库登录错误 使用.NET,“Eric Landes指出他看到了有关的问题 “例外细节: CrystalDecisions.CrystalReports.Engine.LogOnException:登录失败“ 在新闻组中经常发送消息。这是轻描淡写的。 因为我使用“推”方法(首先生成ADO.NET数据集, 然后设置报告的数据源),我从未见过这个错误,但我 决定尝试复制问题,看看为什么会这样 发生 - 似乎是一个流行的错误。我怀疑 模拟和“双跃点”(ASP.NET应用程序所在的位置) 无法通过用户的凭据)可能会在这个问题中发挥作用, 因为埃里克的文章中的方法并没有为每个人解决问题 用户应该。
为了复制问题,我使用了一个连接的ASP.NET项目 远程生产SQL Server数据库或其副本 我的开发机器上的数据库(SQL Server Developer Edition)。一世 创建了一个只是一个简单的SELECT语句的存储过程, 并使用此存储过程作为我的报告源(“拉”方法)。一世 可能创建了这个报告20种不同的方式,测试各种 选项,以及我发现的内容。
第1课:集成或SQL Server安全性
当您开始设计报告时,系统会提示您连接 选择OLEDB连接时的SQL Server数据库(CR.NET 没有使用ADO.NET,ODBC需要系统DSN)。你的选择 要使用集成安全性或输入用户ID和密码。如果 您选择集成安全性,Visual Studio将使用您的 通过Windows连接到SQL Server数据库的凭据 验证。
如果您选择输入用户ID和密码,VS将使用连接 SQL Server身份验证。您无法输入其他域帐户 用户ID和密码框,并通过使用这些凭据连接 Windows身份验证。这些文本框中的此信息只能 用于SQL Server身份验证。即使你必须输入一个 在此阶段密码,密码信息不存储在其中 出于安全原因的报告文件。密码仅用于 建立数据库连接。这意味着您必须应用登录 在运行时向每个表提供信息,如Eric的文章所示。
此时选择的安全方法是安全方法 您必须在生成报告时使用,我们将在第2课中看到。
第2课:仅允许一个安全模型
Crystal Reports引擎无法从Integrated Security切换到 SQL Server安全性。这意味着如果您使用设计报告 集成安全性,您必须提供域用户的凭据 用于登录SQL Server的代码(您可以更改用户,但必须 是一个域帐户)。如果您将使用SQL Server帐户 制作,使用此帐户非常重要 在设计阶段连接到数据库的凭据。
CR设计器缓存数据库连接信息,所以我有 发现最好完全删除所有当前连接然后 在设计报表之前退出并重新打开Visual Studio。我可以 然后使用凭据I建立与数据库的新连接 通缉。您可以通过右键单击服务器中的连接来进行检查 资源管理器并选择“属性”。如果您正在使用SQL Server 帐户,您将看到一个用户名;如果使用集成安全性, 用户名不会出现。
使用SQL Server身份验证时,我发现它也是最好的 在我的dev上有一个SQL Server登录帐户,其用户名相同 数据库以及生产数据库。你应该能够 在生产中使用与开发中不同的SQL Server帐户, 但我偶尔会遇到一些问题,当我试图做的时候我无法解释 如此。
第3课:证书授权/假冒(" Double Hop")
集成安全性只能在两种情况下使用:内部时 Visual Studio(因为它是Windows应用程序,可以直接使用) 使用您的网络令牌连接到远程数据库),或IIS 和SQL Server在同一台生产机器上。如果你试图使用 具有远程SQL的生产IIS服务器上的集成安全性 服务器,您将收到“登录失败”错误。这是因为 应用程序无法模拟从IIS服务器到您的凭据 没有Kerberos或某种类型的SQL Server(“双跃点”) 代表团成立。
Kerberos正在我测试的网络和普通的ASP.NET应用程序上运行 冒充我的凭据到SQL Server,所以它似乎是 Crystal Reports引擎无法利用Kerberos。不是每一个 网络有Kerberos运行,所以如果有疑问,请询问网络管理员。
测试Crystal引擎是否可以使用时 冒充,我试过在中指定我的用户名和密码 web.config文件以及将信息留空(和 ASP.NET辅助进程将使用当前的登录凭据)。在 在这两种情况下,报告都无法连接到远程SQL Server 数据库。 CR引擎可以连接到托管在其上的数据库 同一台机器。
如果您使用的是pull方法,这意味着您唯一的选择 连接到远程SQL Server是为了创建一个新的SQL Server登录 拥有最低权限(注意:不要使用' sa'或其他一些 管理登录 - 这是一种糟糕的安全措施),并使用它 登录代码中的凭据。这实际上并不是件坏事 所有,但我在任何水晶中都找不到这一点 文档。
第4课:设计更改有时会导致登录失败
有时,在进行小的更改后(例如从中删除字段) 报告),我会得到“登录失败”错误。我发现之后 验证数据库(右键单击报告,选择数据库>> 验证数据库)并重新编译项目,问题就消失了。
结论
本文不是一个包含"登录原因的无所不包的列表 失败"错误。此错误非常普遍,可能会被抛出 登录凭据以外的原因。在这些情况下,了解一些 导致此错误的原因可能会节省一些调试时间。
在ASP.NET中启动Crystal Reports应用程序之前,您需要执行此操作 考虑一下您的应用程序的安全上下文 跑下。除了数据安全性和应用程序安全性, 您还必须考虑报告将如何连接到数据库。
就个人而言,我仍然更喜欢push方法。由于此方法使用 ADO.NET数据集,它可以利用优化 System.Data.SqlServer类具有更好的性能和安全性 在连接字符串中处理或由应用程序模拟处理 在web.config文件中指定。