当前位置:  开发笔记 > 数据库 > 正文

我想从Crystal Report .rpt文件中提取SQL查询,有没有办法做到这一点?

如何解决《我想从CrystalReport.rpt文件中提取SQL查询,有没有办法做到这一点?》经验,为你挑选了2个好方法。

我想从Crystal Report .rpt文件中提取SQL查询,有没有办法做到这一点?

我没有任何Crystal Reports产品,只有.rpt文件.



1> JoshL..:

这是一个.Net示例代码,它从给定目录中的所有Crystal Reports中获取Command Sql.它需要安装Crystal 2008 .Net SDK(您可以从SAP下载试用版):

foreach (string file in Directory.GetFiles("c:\\projects\\Reports", "*.rpt"))
{
    Console.WriteLine(String.Format("Processing {0}...", file));
    var doc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    doc.Load(file);

    foreach (dynamic table in doc.ReportClientDocument.DatabaseController.Database.Tables)
    {
        if (table.ClassName == "CrystalReports.CommandTable")
        {
            string commandSql = table.CommandText;

            //TODO: do something with commandSql
        }
    }
}

要在运行报表时将Crystal构建为SQL,请参阅以下链接:SAP Note 1280515 - 如何使用RAS sdk从Crystal报表中提取SQL查询.

我相信这样做,您需要提供报告参数值,以便Crystal可以连接到数据库以构建SQL.在该示例中,由于使用了Report Viewer控件,Crystal可以提示用户输入参数.



2> craig..:

在"Crystal Reports ActiveX Designer设计和运行时库"(craxddrt.dll)中,Report.SQLQueryString属性将执行您想要的操作.

我似乎无法在.Net SDK中找到一个等价的属性,相信我,我一直在寻找.

**编辑**

似乎可以使用进程内RAS服务器来获取此信息:

CrystalDecisions.ReportAppServer.DataDefModel.CommandTableClass.CommandText

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有