2016-08-03 46 views
1

我正在创建一个应用程序将SSRS .rdl文件上载到我们的报表服务器。这是使用ReportingService2010()c#如何编程指定指定的数据源到SSRS .RDL文件? ReportingService2010()

.RDL文件的上载工作正常。

接下来,应用程序应为指定的数据源分配上传的.RDL文件,但此元素失败。我的代码如下所示:

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

我得到以下错误消息:

出现下列错误:

数据源 '/ MyDataSource' 不能被发现。 Microsoft.ReportingServices.Diagnostics.Utilities.DataSourceNotFoundException: 无法找到数据源'/ MyDataSource'。

我很确定我非常接近,但我不能得到它的工作。我已经尝试了许多不同的解决方案&广泛地在线查看(包括堆栈溢出!),但我找不到与我的问题相关的示例。大多数讨论涉及ReportingServices2005。

我应该提到我的数据源驻留在根文件夹'/'中,因为这是一个开发服务器。

我对c#比较缺乏经验,所以也许我缺少一些明显的东西。 任何信息/想法的将非常感激,非常感谢提前。

+0

检查权限“数据来源“并将它们与报告的权限进行比较。他们匹配吗? – tgolisch

+0

不幸的是,他们确实匹配。我非常有信心这个问题是基于代码的(尽管我可能是错的)。 谢谢你的建议。 –

+0

这篇SO文章的代码非常类似于您的代码,但您的文章缺少一些细微的细节。 http://stackoverflow.com/questions/16083951/ssrs-rdl-mapping-datasources-programmatically – tgolisch

回答

1

经过大量研究&失败的尝试我终于偶然发现了一个解决方案。

下面的代码将分配从下拉ddDataSourceSelect选择一个数据源,给你所需的SSRS .rdl文件:

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

而不是简单地嵌入数据源,这将重置数据源。我认为关键的变化是使用'SetItemReferences()'而不是'SetItemDataSources()'。我不会猜到这一点。

非常感谢以下职位他们的解决方案,让我来解决这个问题:

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

我希望这个解决方案可以帮助其他程序员:)