如何在reportviewer控件中更改数据源

时间:2011-03-17 13:19:27

标签: asp.net reporting-services reportviewer

我的页面上有一个reportviewer(Microsoft.ReportViewer.WebForms)控件。我的所有报告都使用一个数据源。我希望能够从我的UAT环境启动时让我的报告在不同的数据库上运行。因此报告的位置是相同的,但数据来自不同的数据库。我似乎无法找到这是怎么做的,甚至可能吗?

编辑:它们是SQL Server上的服务器报告。我知道你可以设置programificaly数据集,但我只是希望报告指向不同的数据库并保持报告的其余部分不变。 2005年 TIA,

约翰

1 个答案:

答案 0 :(得分:7)

您是否要将完整的连接字符串作为参数传递给报表?您可以这样做,但有时SSRS会变得有趣,并确保在执行此操作之前部署新副本之前从服务器上删除报告...

1。创建一个参数 - 让我们调用我们的connectionStr。使其不为空,不为空,单选和文本作为数据类型。最后,您需要隐藏此参数,但为了进行测试,请将其保持可见状态。

  2。因此,您将使用的值作为连接字符串...(对于测试我将其设置为参数的默认值,没有任何内容放在可用值部分下)
< em> Data Source = MySQLServerName; Initial Catalog = MyDatabaseName; Persist Security Info = True; User ID = MyUserNameForTheServer; Password = MyPasswordForTheServer; MultipleActiveResultSets = True

 第3。您需要在报表服务器上使用无人参与的执行帐户,否则就会出现这种情况:未指定无人参与的执行帐户。 (rsInvalidDataSourceCredentialSetting)。
http://msdn.microsoft.com/en-us/library/ms156302.aspx我无法提供更多细节,因为我的老板必须为我做这部分。

  4. 在SSRS中的数据源属性下...选中Embedded Connection,选择类型(我的只是一个普通的MS SQL Server),对于连接字符串,打开表达式框并输入:=参数!connectionStr.value然后单击凭据并确保选择了无凭据的最后一个选项。

  5. 当您尝试在设计视图中编辑数据源时,该数据源的数据集将不再高兴,但您可以将数据源连接属性切换回原来的状态,而不是使用基于参数的连接字符串,用于编辑它们。

我的报告在不同的服务器上,也有不同的报表服务器实例。在某些服务器上,他们需要根据不同的东西从各种数据库中获取数据。这样,以连接字符串作为参数,我可以在任何地方使用相同的报告,只需将它们部署到不同的服务器即可。如果您必须在应用程序或报表查看器周围传递此连接字符串,我建议使用加密。

就像我说的那样......当你开始这样做时,SSRS会很有趣。执行此操作后,您的报告应始终以预览模式运行,如果它们甚至在提供正确的连接字符串时也没有,那么您将遇到仅通过部署到服务器无法解决的问题。一旦它们在服务器上但无法正常工作,解决问题包括检查权限,确保报告收到正确的连接字符串并使SQL数据库中的所有存储过程和函数都完全相同。

如果您只想传递数据库名称,而其他所有内容都相同(服务器名称,用户名,密码),那么只需将连接字符串参数设置为等于您的数据库名称,并将数据源表达式值设置为使用
="Data Source=MySQLServerName;Initial Catalog=" + Parameters!connectionString.value + ";Persist Security Info=True;User ID=MyUserNameForTheServer;Password=MyPasswordForTheServer;MultipleActiveResultSets=True"
我需要传递整个内容,您可以使用凭据设置 - 您可以在每个报告中保存服务器用户名/密码信息,以便不需要无人值守的执行帐户。