2

我在ReportServer上部署了一個報告。本報告使用的是也部署在ReportServer上的共享數據源。 我正在使用WindowsFormsHost控件的WPF應用程序中使用ReportViewer。通過配置ReportViewer的ServerReport屬性,我可以在我的應用程序中正確顯示來自ReportServer的Report。我想更新來自c#代碼的SSRS報告的共享數據源

我的問題是,無論如何改變部署在我的報告正在使用的ReportServer上的共享DataSource的連接字符串。

其實我想用相同的Report來測試和遷移同一個數據庫的多個副本。

任何人都可以請告訴我一個解決方案來更新C#代碼中的共享數據源?

+0

我知道你可以檢索數據源,但我不認爲你可以在ServerReport中設置它。你可以在LocalReport中用'this.reportViewer1.LocalReport.DataSources.Add(ReportDataSource)' – 2015-04-02 16:07:28

+0

這就是限制我更新數據源的原因。 – jadavparesh06 2015-04-06 05:10:28

回答

3

無法通過ReportViewer更改報表的數據源。您可以使用Web服務來更改數據源,但這實際上會更改服務器上的所有用戶的數據源 - 可能不是您想要執行的操作。

我認爲最接近你可以得到的是建立你的報告與嵌入式數據源,使用參數值來控制其連接字符串。您可以構建一個共享數據集,該數據集通過名稱提供連接字符串(「Test」,「Migration」等),並將該名稱作爲參數傳遞給報告。

你將需要:

  1. 不會更改共享數據源。
  2. 一個共享數據集,返回連接名稱列表,如「測試」和「遷移」。我們稱之爲NamedConnections。這些可能來自共享數據源中的表格,也可能是數據集查詢中的硬編碼。
  3. 一個共享數據集,它採用參數@NamedConnection並返回一個完整連接字符串的單個字符串值。再次,這些可能來自數據庫或硬編碼。我們將其稱爲SelectedConnection
  4. A @NamedConnection參數在報告中。這應該是可見的,並應使用NamedConnections數據集的可用值。
  5. A @ConnectionStringinternal參數在報告中使用SelectedConnection數據集作爲默認值。
  6. 報告中的嵌入數據源使用@ConnectionString參數。這使您可以使用數據集設計器來構建數據集。我會叫它StaticConnection
  7. 的報告中嵌入的數據源使用@ConnectionString參數作爲其連接字符串。報表設計完成並準備好部署後,切換您的數據集以使用此數據源。我們稱之爲DynamicConnection

現在使用ReportViewer,例如,將值「Test」傳遞給@NamedConnection參數。然後,SelectedConnection數據集可以運行併爲@ConnectionString參數提供適當的連接字符串,然後由DynamicConnection數據源使用。

實際的數據源引用永遠不會改變,但其中的連接字符串確實會改變。