代码之家  ›  专栏  ›  技术社区  ›  Eric Schneider

如何使用.NET代码从Crystal报表文件获取Oracle包名称

  •  0
  • Eric Schneider  · 技术社区  · 16 年前

    我正在尝试使用.NET代码获取用于Crystal报表数据源的Oracle包名称。 我已经获得了过程名,但是由于某种原因我找不到包名。

         Dim rpt as new ReportDocument
         rpt.Load(filename)
    
         Dim procedureName As String = rpt.Database.Tables.Item(0).Location 
         Dim DataSourceAliasName As String = rpt.Database.Tables.Item(0).Name
    

    当前使用的.NET Crystal Decisions版本:10.5.3700.0

    2 回复  |  直到 15 年前
        1
  •  4
  •   mbasil    15 年前

    QualifiedName属性未在公共DotNet包装上公开。您必须访问非公共的底层com对象并使用它。

    您需要引用以下dll:

    CrystalDecisions.CrystalReports.Engine
    CrystalDecisions.ReportAppServer.DataDefModel
    

    下面是一个示例代码片段。请注意,它将以模式名称作为前缀。我最终在我真正的实现中砍掉了它。

    using System;
    using System.Reflection;
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.ReportAppServer.DataDefModel;
    
    namespace ConsoleApplication1
    {
       class Program
       {
          static void Main(string[] args)
          {
             ReportDocument doc = null;
             CrystalDecisions.CrystalReports.Engine.Table table = null;
             PropertyInfo prop = null;
             ISCRTable rasTable = null;
    
             doc = new ReportDocument();
             doc.Load("c:\\workspace\\temp\\example.rpt");
             table = doc.Database.Tables[0];
    
             prop = table.GetType().GetProperty("RasTable",BindingFlags.NonPublic | BindingFlags.Instance);
             rasTable = (ISCRTable)prop.GetValue(table, null);
    
             Console.Out.WriteLine(table.Name);    
             Console.Out.WriteLine(rasTable.QualifiedName);
    
          }
       }
    }
    
        2
  •  0
  •   Cj Anderson    16 年前

    您是否尝试设置断点并查看rpt.database.tables.item(0)的内容?

    更新:以下是一些属性的列表: Crystal Reports