2016-08-03 31 views
1

Ich erstelle eine Anwendung zum Hochladen von SSRS .rdl-Dateien auf unseren Berichtsserver. Dies verwendet ReportingService2010()C# Wie wird die angegebene dataSource programmgesteuert den SSRS-RDL-Dateien zugewiesen? ReportingService2010()

Der Upload der .RDL-Datei funktioniert einwandfrei.

Als nächstes sollte die Anwendung der hochgeladenen .RDL-Datei eine angegebene Datenquelle zuweisen, aber dieses Element schlägt fehl. Mein Code ist unten dargestellt:

DataSource[] dsarray = new DataSource[1]; 

string DSName = "MyDataSource"; 

DataSourceReference reference = new DataSourceReference(); 

DataSource ds = new DataSource(); 

dsarray[0] = new DataSource(); 

reference.Reference = "/" + DSName; 

ds.Item = reference; 
ds.Name = "/" + DSName; 

dsarray[0] = ds; 

rs.SetItemDataSources("/" + location + "/" + filename, dsarray); 

ich die folgende Fehlermeldung:

Folgender Fehler ist aufgetreten:

Die Datenquelle '/ MyDataSource' kann nicht gefunden werden. Microsoft.ReportingServices.Diagnostics.Utilities.DataSourceNotFoundException: Die Datenquelle '/ MyDataSource' kann nicht gefunden werden.

Ich bin mir ziemlich sicher, dass ich sehr nah bin, aber ich kann es einfach nicht funktionieren. Ich habe viele verschiedene Lösungen ausprobiert & online ausgiebig geschaut (einschließlich Stack-Überlauf!), Aber ich kann keine Beispiele zu meinem Problem finden. Die meisten Diskussionen beziehen sich auf ReportingServices2005.

Ich sollte erwähnen, meine Datenquelle befindet sich im Stammordner "/", da dies ein Entwicklungsserver ist.

Ich bin relativ unerfahren mit C# so vielleicht fehlt mir etwas offensichtlich. Jede Info/Idee würde sehr geschätzt, vielen Dank im Voraus.

+0

die Berechtigungen Überprüfen Sie die ‚Data Quelle 'und vergleichen Sie sie mit den Berechtigungen für den Bericht. Passen sie zusammen? – tgolisch

+0

Leider passen sie zusammen. Ich bin ziemlich sicher, dass das Problem Code-basiert ist (obwohl ich falsch liegen könnte). Vielen Dank für den Vorschlag. –

+0

Dieser SO-Artikel hat einen Code, der Ihrem sehr ähnlich ist, aber Ihnen fehlen einige subtile Details. http://stackoverflow.com/questions/16083951/ssrs-rdl-mapping-datasources-programmatic – tgolisch

Antwort

1

Nach viel Recherche & gescheiterten Versuchen bin ich endlich über eine Lösung gestolpert.

Der folgende Code wird eine Datenquelle aus dem Dropdown-ddDataSourceSelect, auf die Ihre gewünschte SSRS RDL-Datei ausgewählt zuweisen:

string DSName = ddDataSourceSelect.SelectedValue.ToString(); 

List<ReportService2010.ItemReference> itemRefs = new List<ReportService2010.ItemReference>(); 
ReportService2010.DataSource[] itemDataSources = rs.GetItemDataSources("/" + location + "/" + filename); 

foreach (ReportService2010.DataSource itemDataSource in itemDataSources) 
{ 
    ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference(); 
    itemRef.Name = itemDataSource.Name; 

    itemRef.Reference = "/" + DSName; 

    itemRefs.Add(itemRef); 
} 

rs.SetItemReferences("/" + location + "/" + filename, itemRefs.ToArray()); 

Anstatt einfach eine Datenquelle Einbettung, diese setzt die Datenquelle. Ich denke, die Schlüsseländerung war 'SetItemReferences()' anstelle von 'SetItemDataSources()'. Das hätte ich nicht vermutet.

Vielen Dank an den folgenden Beitrag zu ihrer Lösung, die mich um dieses Problem zu lösen erlaubt:

Deploying SSRS RDL files from VB.Net - Issue with shared datasources

ich diese Lösung hoffen :) andere Programmierer helfen können