2010-03-03 38 views
0

我正在嘗試使用.NET代碼獲取用於Crystal報表數據源的Oracle包名稱。 我已經獲得了程序名稱,但由於某種原因我無法找到程序包名稱。如何使用.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

+0

此問題特定於Crystal API。 – eschneider

回答

4

的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); 

     } 
    } 
} 
0

您是否嘗試設置一個破發點,並查看rpt.Database.Tables.Item的內容(0)?

更新:下面是一些屬性的列表:Crystal Reports

+0

是的,我找不到它。 – eschneider

相關問題