Ssrs 2008 SSRS ReportingService2010将嵌入式数据源更改为共享数据源

Ssrs 2008 SSRS ReportingService2010将嵌入式数据源更改为共享数据源,ssrs-2008,Ssrs 2008,我在一台服务器上安装了带有SSR的SQL Server 2008,在新服务器上安装了带有SSR的SQL Server 2008 R2。我想使用SSRSWeb服务API将200多个报告以及一些共享计划和一些数据源从第一台服务器迁移到第二台服务器。为了简单起见,因为只有几个共享数据源,所以我继续使用报表管理器界面创建了这些共享数据源 不幸的是,在我之前的人在每个报告中都嵌入了数据源信息(连接字符串、登录名、密码等)。我认为这将是一个很好的时间来改变这些指向共享数据源,这样就不必为每个报告逐个执行这些

我在一台服务器上安装了带有SSR的SQL Server 2008,在新服务器上安装了带有SSR的SQL Server 2008 R2。我想使用SSRSWeb服务API将200多个报告以及一些共享计划和一些数据源从第一台服务器迁移到第二台服务器。为了简单起见,因为只有几个共享数据源,所以我继续使用报表管理器界面创建了这些共享数据源

不幸的是,在我之前的人在每个报告中都嵌入了数据源信息(连接字符串、登录名、密码等)。我认为这将是一个很好的时间来改变这些指向共享数据源,这样就不必为每个报告逐个执行这些操作。我可以使用CreateCatalogItem在新服务器上创建报告,但我似乎无法确定如何正确地从嵌入式数据源更改为共享数据源

到目前为止,我已尝试了两种SetItemReferences:

itemRef.Reference = "/Data Sources/TMS";
itemRef.Name = "TMS";
itemRef.Reference = "/Data Sources/TMS";

rs2010.SetItemReferences(catItem.Path, new ReportService2010.ItemReference[] { itemRef });
和SetItemDataSources:

ReportService2010.DataSourceReference dataSourceRef = new ReportService2010.DataSourceReference();
dataSourceRef.Reference = "/Data Sources/TMS";

ReportService2010.DataSource dataSource = new ReportService2010.DataSource();
dataSource.Name = "TMS";
dataSource.Item = dataSourceRef;

rs2010.SetItemDataSources(catItem.Path, new ReportService2010.DataSource[] { dataSource });
这两种方法在使用嵌入数据源的报表上尝试时都会导致“NotFoundException”,但在已经指向共享数据源的报表上,它们都可以正常工作


此外,我在谷歌和StackOverflow搜索了所有的解决方案,但什么也没找到。有人能给我指出正确的方向吗?

所以我一直在使用SetItemReferences方法,并且有一个非常好的想法,最终成功了。我使用的最终代码如下:

List<ReportService2010.ItemReference> itemRefs = new List<ReportService2010.ItemReference>();
ReportService2010.DataSource[] itemDataSources = rs2010.GetItemDataSources(catItem.Path);

foreach (ReportService2010.DataSource itemDataSource in itemDataSources)
{
    ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference();
    itemRef.Name = itemDataSource.Name;
    itemRef.Reference = "/Data Sources/TMS";
    itemRefs.Add(itemRef);
}

rs2010.SetItemReferences(catItem.Path, itemRefs.ToArray());
List itemRefs=new List();
ReportService2010.DataSource[]itemDataSources=rs2010.GetItemDataSources(catItem.Path);
foreach(ReportService2010.DataSource itemDataSource中的itemDataSource)
{
ReportService2010.ItemReference itemRef=新的ReportService2010.ItemReference();
itemRef.Name=itemdasource.Name;
itemRef.Reference=“/Data Sources/TMS”;
itemRefs.Add(itemRef);
}
SetItemReferences(catItem.Path,itemRefs.ToArray());

问题是我使用的数据源名称与report.rdl文件中的数据源名称不同。我能够使用GetItemDataSources方法确定名称。由于此方法返回一个数组,并且在所述数组中可能有多个项,因此,如果存在多个项引用,我将通过该方法创建多个项引用,尽管我怀疑这种情况是否经常发生。

谢谢-您的代码帮助我实现了非常类似的功能。很好!非常感谢。如果Microsoft文档告诉我们如何做到这一点,那就太好了