【问题标题】:SQL Server 2005 Report Builder How to dynamically change Data Source?SQL Server 2005 Report Builder 如何动态更改数据源?
【发布时间】:2009-05-11 15:31:11
【问题描述】:

我们需要能够动态更改在报表生成器中构建/管理的报表的数据源。基本上它的数据库结构相同,但每个客户端都有自己的数据库,因此根据 ClientID 的参数,它需要动态转到相应的数据库。

有人对此有什么好的解决方案吗?

【问题讨论】:

    标签: sql-server-2005 reporting-services reportbuilder


    【解决方案1】:

    您可以创建一个存储过程,根据传递的参数从不同的数据库中动态提取数据,而不是动态更改数据源(我什至不确定这是否可能)。

    CREATE PROCEDURE ProcedureName 
        -- Add the parameters for the stored procedure here
        @clientName nvarchar(100)
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
    
        -- Insert statements for procedure here
    
    declare @sql nvarchar(max)
    
    set @sql='select * from ' + @clientName + '.dbo.Products'
    
    exec(@sql)
    
    
    END
    GO
    

    【讨论】:

    • 您必须假设不同的客户端数据库在同一个 SQL Server 实例上运行才能正常工作。
    • 我认为可能工作的问题是“报表生成器”要求您使用生成的“模型”。我们希望将报表生成器提供给报表生成器用户,但如果我们无法更改底层连接,因为模型也已连接它......至少看起来是这样。
    • 啊。你没有提到任何关于报告生成器的事情。根据您拥有的客户数量,您可以为每个客户创建一个模型,但如果您有很多客户或者您的客户列表发生很大变化,这将不会很好。
    • 实际上确实在主题中提到了它,但它是一个通用名称,很容易错过。我们的想法也是..谢谢
    【解决方案2】:

    这类似于将报表模型部署到服务器的问题。您可以通过采用如下所述的架构来完成(我认为)您需要的东西。

    • 在报告服务器上为每个客户端创建一个文件夹,.适当设置权限,以便客户端无法运行彼此的报告。在此文件夹下放置一个名为“数据源”或类似名称的文件夹,并将所有报告的数据源放在此文件夹中。这意味着任何以编程方式重新连接数据源的工具都知道数据源相对于报表的确切位置。请注意,数据源还应具有特定的、可预测的名称。

    • 编写一个小的 .net 应用程序来部署报表、数据源和报表模型。这比听起来容易,因为 SSRS 导出了一个相当简单的 Web 服务来执行此操作。

    • IronPython 是一个很好的方法来试验这个 Web 服务并弄清楚如何驱动它。为此,您需要使用 WSDL 包装器生成器 (WSDL.EXE IIRC) 并制作一些 C# 存根。编译存根并将库注册到 IronPython。然后使用交互式 shell 来试验 Web 服务 API。如果您愿意,请用 C# 重写。

    • 还有一个与 SSRS 捆绑在一起的工具,称为 rs.exe,它获取一个 VB.net 文件,对其进行置顶和加尾并编译结果,以便您可以使用 VB.net 编写与报表服务器一起使用的脚本.

    此 .net 应用程序将部署报告并连接数据源。对其进行设置,使其可以部署在任何给定文件夹下。当您设置客户时,请在您创建他们的文件夹时设置的“数据源”文件夹下设置他们的数据源。您可以以编程方式部署报告文件,并通过几行代码将其连接到数据源。在客户端文件夹下部署报表。

    通过命令行下的服务器名称和目录进行参数化,应用程序可以部署报告并将其数据源连接到“数据源”文件夹下的数据源。报告中对数据源的引用可以具有相对路径,因此报告可以完全不知道它们在层次结构中的位置。

    将其包装在批处理文件中或使用其他方式自动部署整套报告。作为奖励,这使得部署到测试环境变得容易。对于额外的奖励积分,您可以扩展应用程序,使其可以遍历客户根目录下的任意目录并下载它在那里找到的报告。

    部署报表模型是类似的,但有一个额外的变化。报表模型的属性之一是依赖于它的报表列表。您将需要捕获此列表(同样,这很容易以编程方式完成)并将报告重新连接到数据源(报告模型是这些报告的数据源)。

    这允许您部署(或克隆,如果您已实现下载功能)任何报告套件,并以编程方式将它们部署到服务器上特定于客户端的目录。它还为您提供了一个简单的安全模型,因为您可以通过客户端的根目录保护对报告的访问。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多