c# - 如何检索 Crystal Report 中使用的 SQL SELECT 语句?

标签 c# .net crystal-reports crystal-reports-2008

我目前正在开发一个 C# 程序,它允许我们的用户运行、查看和导出一批 Crystal Reports。这些报告是使用 Crystal Reports 2008 GUI 制作的。这样做的主要原因之一是允许我们在将 Crystal Report 导出为 PDF 时保留超链接。我的程序通过导出为 rtf,然后将 rtf 转换为 pdf 来执行此操作。如果有人知道在转换为 PDF 时保留超链接的不那么复杂的方法,我很想听听,但这不是我当前的问题。

我做了很多关于如何优化我的程序以使导出花费尽可能少的时间的测试。据我所知,让应用程序查询数据,然后将结果集绑定(bind)到 Crystal Report 是迄今为止最快的方法。我的问题是我无法将查询硬编码到程序中,它们需要从 Crystal Report 本身中检索。

在 Crystal Reports 2008 中,数据库菜单下有一个名为“显示 SQL 查询”的选项。这将打开一个窗口,其中包含用于给定报告的 SQL 查询。这正是我需要从我的应用程序中获得的。我加载了一份 Crystal 报表,并在调试时遍历了 ReportDocument 对象,试图找到查询,但没有成功。

所以,我的问题是;是否有任何可用的方法可以让我提取给定 Crystal Report 使用的查询?

最佳答案

我意识到这是一个非常古老的问题,但我想我会为那些偶然发现这个问题但需要 3.5 的框架目标(动态在 3.5 中不可用)的人提供一个替代方案。

要使此解决方案正常工作,您需要以下引用资料。

using CrystalDecisions.ReportAppServer.DataDefModel;
using CrystalDecisions.CrystalReports.Engine;

然后只需使用以下命令访问 ClientDoc 界面并返回命令文本字符串列表。

    private static List<string> GetCommandText(CrystalDecisions.CrystalReports.Engine.ReportDocument report)
    {
        var rptClientDoc = report.ReportClientDocument;
        return rptClientDoc.DatabaseController.Database.Tables.OfType<CommandTable>()
              .Select(cmdTbl => cmdTbl.CommandText).ToList();
    }

关于c# - 如何检索 Crystal Report 中使用的 SQL SELECT 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140665/

相关文章:

c# - 内部声明变量的 T-SQL 参数化查询?

asp.net - 从数据库向 JW Player 提供电影文件

sql-server - 如何从多列(在 sql 中)创建交叉表(在 Crystal 中)

.net - 是否可以像 Outlook RTF/TNEF 那样在 html 电子邮件中嵌入非图像附件?

.net - 等同于 .NET 中的 Windows 错误代码

c# - C# Crystal Reports 中的分页符

crystal-reports - Crystal Reports 按日期分组总和

c# - 如何为验证属性错误消息组合资源字符串?

c# - 如何提高自定义 BindingList 上 AddRange 方法的性能?

c# - 如何在 FirstChanceException 的日志记录中包含实际的表单类名?