少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述解决方案:从C#app调用Crystal Report导致“数据库登录失败”或“加载报告失败”相关的知识,希望能为你提供帮助。
因此本周早些时候我不得不更新一些使用Crystal Reports的旧代码,每次我尝试更新代码时,我都会收到“加载报告失败”或“数据库登录失败”。
如果你碰到了那些,你会非常清楚它们只是“抓住所有”的异常,从水晶报告dlls中冒出来。每个三个简单的单词,它们可以字面意思是几十个可能的问题中的任何一个......而不仅仅是你所看到的。
数据库登录失败:可能是您的登录错误;
可能是您的数据源在报告中设置不正确;
可能是您的报告中的字体不受支持。你不知道,因为它不会告诉你!
加载报告失败:可能是您的报告路径不正确;
可能是您的用户没有Windows / temp文件夹的权限。可能是报告已损坏。但你知道吗?没有!你只会知道“加载报告失败”。
那么如果你得到其中一个,你会怎么做?
答案我推荐以下两件事,它们可以让你记录ACTUAL错误,看看世界上刚刚发生了什么。下面列出的每个建议的来源的相关链接:
【解决方案(从C#app调用Crystal Report导致“数据库登录失败”或“加载报告失败”)】1)去抓取sysinternal的“Process Monitor”或“Procmon”。谷歌公司/产品,如果你不熟悉;
它通常被认为是安全可靠的,但在继续之前为自己做出决定。有关于如何使用它的youtube视频,但如果你经常处理专有的dll,这个工具将在未来使你的开发寿命提高100000倍。
2)这是大人物。首先,让我们确认一下这对您有用。在遇到麻烦的机器上,跳过C盘(或你的东西上的任何驱动器)并搜索一个名为“crlogger.dll”的dll如果你拥有它:你很幸运!如果没有...我很抱歉:(您可以尝试以下,但它可能无法正常工作。
Lets add some logging!
跳到您的系统属性 - >
环境变量。将以下3添加到系统变量中:
LOGGING_DIR = c: logging
LOGGING_ENABLED_ASSERT = 1
LOGGING_ENABLED_RUNTIME = 30
保存,如果该文件夹不存在(或将上面的内容设置为其他目录),请进入该文件夹并返回到您的应用程序。做你做的任何事情来打破它。现在跳回到日志文件夹和tada!你现在有了ACTUAL日志。您可以调试真实的实际错误。
就我而言,我遇到了这两个错误。
加载报告失败:我安装了64位CR运行时,但不是它正在寻找的32位。我安装了,这个错误被打败了。
数据库登录失败:我查看了日志,发现“Microsoft SQL Server Native Client 11.0说明:客户端不支持加密。”。事实证明这是两件事,procman帮助我确定:
1)当我有Client 11时,我没有足够新的版本。我去了一个更新的安装程序,特别是“Microsoft? SQL Server? 2012 Native Client - QFE”安装程序。 (我们有2016年,但没有2016年本地客户)
2)I had to add some registry keys!这是通过Process Monitor无法找到这些密钥而显而易见的。
无论如何,这应该让你回到路上。现在你不必猜测出了什么问题,并且实际上可以开始解决问题了。
对于你们许多人来说,这篇文章现在没有必要。但是我希望能够提高可视性,因为有一天,其他一些可怜的开发人员会像我一样拉扯几个全能的人后,最终会找到解决方案。在我找到日志记录之前,我花了近30个小时来解决这个问题,然后在1小时后修复了问题,因为我确实有可操作的项目可以处理。
祝你好运!
推荐阅读
- Android日历序列化与Java 6不兼容
- Jackson ObjectMapper给出了递归数据类型的错误
- Android java测试浮动负值和正值不起作用吗()
- Settings.Secure.ANDROID_ID在构建APK和签名APK中为何不同()
- Struts 2 - 没有映射名称空间[/]的动作和与上下文路径[/ LoginApplication]相关联的动作名称[validateLogin]
- ActionMapper类在struts 2中的作用是什么
- 执行新的runnables时丢失ApplicationContext
- 在Winforms中使用带有C#的InputSimulator以正确的方式模拟按键
- 如何在Symfony 3中为Guzzle创建PSR-6文件系统缓存