2012-10-30 74 views
4

我有SQL Server 2008,SSRS安裝在一臺服務器上,SQL Server 2008 R2安裝在新服務器上安裝了SSRS。我想使用SSRS Web服務API將200多份報告以及一些共享計劃和一些數據源從第一臺服務器遷移到第二臺服務器。爲了簡單起見,由於只有幾個共享數據源,我繼續使用Report Manager界面創建這些數據源。SSRS ReportingService2010將嵌入式數據源更改爲共享數據源

不幸的是,那些來我之前的人在每個報告中嵌入了數據源信息(連接字符串,登錄名,密碼等)。我認爲這將是一個很好的時機來改變這些指向共享數據源,因此不必爲每個報告逐一完成。我可以使用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的解決方案,但沒有發現任何東西。任何人都可以在這裏指出我正確的方向嗎?

回答

4

所以我一直在使用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()); 

問題是我沒有使用與在報告.rdl文件中找到的相同的DataSource名稱。我能夠使用GetItemDataSources方法確定名稱應該是什麼。由於此方法返回一個數組,並且可能在數組中有多個項目,所以如果存在多個項目引用,則循環遍歷它以創建多個ItemReferences,儘管我懷疑這種情況經常發生。

+0

謝謝 - 你的代碼幫助我實現了非常相似的東西。 – KenD

+0

不錯!謝謝。如果Microsoft文檔告訴我們如何做到這一點,那將會很好 –