c#如何以编程方式将指定的dataSource分配给SSRS .RDL文件? ReportingService2010()

时间:2016-08-03 11:27:22

标签: c# reporting-services datasource reportservice2010

我正在创建一个将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#相对缺乏经验,所以也许我错过了一些明显的东西。 任何信息/想法将非常感谢,非常感谢提前。

1 个答案:

答案 0 :(得分: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

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