2009-02-26 2 views
4

Ich mache derzeit eine ASP.Net und C# Seite, die ein Front-End für einige Berichte ist.So erhalten Sie die Datenquellinformationen aus einem SSRS-Bericht mit .NET

Ich möchte auch einige Abfragen ausführen, aus der gleichen Datenquelle wie die Berichte (jeder Bericht verwendet nur 1 Datenquelle).

Ist es möglich, die Datenquellenverbindungsinformationen aus einem Bericht mithilfe von ReportingService2005- oder ReportExecutionService-Mitgliedern zu extrahieren, sodass sie in einer SqlConnection wiederverwendet werden können?

Antwort

3

Sie können die API ReportingService2005 verwenden, um die von einem bestimmten Bericht verwendete Datenquelle abzurufen.

Sie benötigen den vollständigen Pfad des Berichts (von dem ich annehme, dass Sie ihn haben) und dann den Berichtsservice für seine Datenquelle abfragen (API).

// rs = ReportingService2005 that you need to set up. 

DataSource ds; 
DataSources dataSources = rs.GetItemDataSources(item); 

// item is a string containing the full path to the report. 

dataSources = rs.GetItemDataSources(item); 
ds = dataSources[0]; 

Die ds in dem obigen Code ist entweder ein DataSourceDefinition oder ein DataSourceReference. Wenn es sich um eine Definition handelt, können Sie sie einfach in diesen Typ umwandeln und dann die Verbindungszeichenfolge mit dem folgenden Code abrufen.

DataSourceDefinition dsd = ds as DataSourceDefinition(); 
if(dsd == null) 
    throw new Exception(); 

String connectionString = dsd.ConnectString; 

Wenn es ein datasourcereference Sie die API überprüfen benötigen.

+0

VB ist ein bisschen rostig? Das OP spezifizierte C# als die Sprache, die sie benutzen – csjohnst

+0

Der VB-Code war genug für mich, um es in C# arbeiten zu lassen, es tut genau, was ich will - Danke :) – Sophia

+0

@csjohnst: Jetzt, wo du es sagst .. :) Skript, das ich in VB gemacht habe, war ich verwirrt. –

0

Hoffentlich hilft das etwas. Es wird alle Eigenschaften auflisten, aber es zieht die Verbindungszeichenfolge heraus:

using System; 
using GetPropertiesSample.ReportService2010; //This is the WebService Proxy 
using System.Diagnostics; 
using System.Reflection; 
using System.Web.Services.Protocols; 
using System.IO; 

namespace GetPropertiesSample 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Get_Properties_of_DataSource_given_The_Path_and_Name_of_the_Report(); 
    } 

    private static void Get_Properties_of_DataSource_given_The_Path_and_Name_of_the_Report() 
    { 
     try 
     { 

      // Create a Web service proxy object and set credentials 
      ReportingService2010 rs = new ReportingService2010(); 
      rs.Credentials = System.Net.CredentialCache.DefaultCredentials; 
      string reportPathAndName = "/0_Contacts/209_Employee_Telephone_List_Printable"; 

      DataSource[] dataSources = rs.GetItemDataSources(reportPathAndName); 

      DataSource ds = dataSources[0]; 
      string dsName = ds.Name; 
      Debug.Print("----------------------------------------------------"); 
      Debug.Print("Data Source Name: " + dsName); 
      Debug.Print("----------------------------------------------------"); 
      DataSourceDefinition dsd = (DataSourceDefinition)ds.Item; 
      if (dsd != null) 
      { 
       //Here is one property 
       string connectionString = dsd.ConnectString; // <====== HERE is the Connection Strin 
       //Use Reflection to get all the properties : using System.Reflection; 
       var typeDSD = typeof(DataSourceDefinition); 
       var properties = typeDSD.GetProperties(); 
       foreach (PropertyInfo p in properties) 
       { 
        Debug.Print("----------------------------------------------------"); 
        Debug.Print(p.Name + ": " + p.GetValue(dsd, null)); 
       } 
      } 

     } 
     catch (SoapException e) 
     { 
      Debug.Print("=============================="); 
      Debug.Print(e.Detail.OuterXml); 
      Debug.Print("=============================="); 
     } 
     catch (Exception e) 
     { 
      Debug.Print("=============================="); 
      Debug.Print(e.Message); 
      Debug.Print(e.InnerException.ToString()); 
      Debug.Print(e.ToString()); 
      Debug.Print("=============================="); 
     } 
    } 
}