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
我希望这个解决方案可以帮助其他编码人员:)
我正在创建一个应用程序来将 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
我希望这个解决方案可以帮助其他编码人员:)