2010-03-25 51 views
5

我需要检索Crystal报表正在运行的存储过程的名称。有没有办法在C#中使用CrystalDecisions.CrystalReports.Engine.ReportDocument对象执行此操作?查找Crystal Report正在使用的存储过程

我似乎无法找到一个属性,会给我的存储过程名称。

这甚至可能吗?我经历了几乎所有我能想到的属性。 DataDefinition对象具有公式,参数,组名称和运行总计字段的集合,但数据库字段没有。

编辑:我需要以编程方式做这件事,因为我有很多报道。我需要跳过报告的实际运行并只执行报告将使用的存储过程。因此,当使用该程序将报告信息插入到数据库中时,我希望能够取出其存储过程并分别存储该信息。

+0

就像只是一次或编程?如果它只是一次,我建议你将sql分析器附加到问题的数据库,调用报告,看看它做了什么。 – 2010-03-25 17:41:05

+0

以编程方式。实际上我们有几百个报表,但有些用户希望直接运行存储过程,并将结果导出到CSV文件。这适用于几乎所有的报告,因为我们对存储过程有一个标准的命名实践,但有一些奇怪的情况。我宁愿将它从报告中提取出来,放到数据库的某个地方,而不必保留一份清单。 – Brandon 2010-03-25 18:06:43

回答

4

你会踢自己。 SP的是...

ReportDocument.Database.Tables

DataBase

然后Table.Location

Table

也不要忘了子报表......这是ReportDocuments的另一个集合。

+0

非常感谢。你为我节省了很多工作,而且我正在踢自己不检查Table对象:P – Brandon 2010-03-26 22:27:18

1

您可以使用SQLServer的探查捕捉到,当你运行水晶报表被称为什么存储过程。

首先,您需要拥有运行探查器的正确权限。
其次,您需要开始追踪并立即执行报告。
第三,停止跟踪&扫描以查看执行报告的存储过程的名称。

+0

感谢您的回答,但我实际上需要以编程方式进行此操作。 – Brandon 2010-03-25 22:55:15

+0

你可以尝试在像wordpad或xmlnotepad这样的编辑器中打开报告本身吗?也许这可能有一些元数据,你可以搜索sproc。 – SoftwareGeek 2010-03-26 18:13:03

0

您可以输出一个表的各种属性与此代码(抱歉,这是在VB中,这就是我要使用此项目):

私人小组logLogOnInfo(表如表) log.DebugFormat( “LogOnInfo.ConnectionInfo for {0}:”,table.Name) Dim ci As ConnectionInfo = table.LogOnInfo.ConnectionInfo log.Debug(String.Format(“AllowCustomConnection:{0},DBName:{1},IntegratedSecurity: {2}“,ci.AllowCustomConnection,ci.DatabaseName,ci.IntegratedSecurity)) log.Debug(String.Format(”ServerName:{0},User:{2},Password:{1},Attributes: ci.ServerName,ci.Password,ci.UserID))

For Each a As NameValuePair2 In ci.Attributes.Collection 
    If a.Name = "QE_LogonProperties" Then 
     Dim attributes As DbConnectionAttributes = a.Value 
     For Each b As NameValuePair2 In attributes.Collection 
      log.DebugFormat("  {0}: {1}", b.Name, b.Value) 
     Next 
    Else 
     log.DebugFormat(" {0}: {1}", a.Name, a.Value) 
    End If 
Next 

末次