我正在创建一个将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 :(得分: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
我希望这个解决方案可以帮助其他程序员:)