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

c# How to assign specified dataSource to SSRS .RDL files programmatically? ReportingService2010()

我正在创建一个应用程序来将 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);

我收到以下错误消息:

出现以下错误:

The data source '/MyDataSource' cannot be found. Microsoft.ReportingServices.Diagnostics.Utilities.DataSourceNotFoundException: The data source '/MyDataSource' cannot be found.

我很确定我非常接近,但我就是无法让它工作。我尝试了许多不同的解决方案并广泛地在线查看(包括堆栈溢出!),但我找不到与我的问题相关的示例。大多数讨论都与 ReportingServices2005 有关。

我应该提到我的数据源位于根文件夹“/”中,因为这是一个开发服务器。

我对 C# 相对缺乏经验,所以我可能遗漏了一些明显的东西。 任何 info/idea 的人都将不胜感激,在此先感谢您。

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

下面的代码将从下拉 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()'。我不会猜到这个。

非常感谢以下 post 的解决方案让我解决了这个问题:

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

我希望这个解决方案可以帮助其他编码人员:)