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数据源使用。

实际的数据源引用永远不会改变,但其中的连接字符串确实会改变。