Asp.net 将逗号分隔的输入参数传递给SSRS报告服务

Asp.net 将逗号分隔的输入参数传递给SSRS报告服务,asp.net,reporting-services,ssrs-2008,Asp.net,Reporting Services,Ssrs 2008,我有一个网页,其中有一个文本框,用户在其中输入发票号并按下显示按钮 然后向用户显示一份SSRS报告,该报告有一个标题,如库存号、地址、名称等,该发票的详细信息以表格格式显示在标题下。我使用两个数据集成功地实现了这一要求,其中一个数据集 ds_header_inv_dtl parameter as @invoiceno and ds_detail_inv_info parameter as @invoiceno 现在的问题是需求已更改,用户将使用逗号分隔符输入多个发票号,然后按“显示报告”按钮

我有一个网页,其中有一个文本框,用户在其中输入发票号并按下显示按钮 然后向用户显示一份SSRS报告,该报告有一个标题,如库存号、地址、名称等,该发票的详细信息以表格格式显示在标题下。我使用两个数据集成功地实现了这一要求,其中一个数据集

ds_header_inv_dtl parameter as @invoiceno and 
ds_detail_inv_info parameter as @invoiceno
现在的问题是需求已更改,用户将使用逗号分隔符输入多个发票号,然后按“显示报告”按钮。 同一报告应显示为标题信息、详细信息和分页符,然后再显示标题信息->详细信息和分页符等

是否可以为ssrs报告创建XML文件


请帮助我如何达到这种要求

为什么要创建xml文件?通常的方法是使用一个参数,该参数是以逗号分隔的发票编号列表。将列表作为字符串传递,然后在sql中将其转换为不同的值请参见 有关如何执行此操作的示例


另一种方法是使用接受多个值的参数创建报告。然后不能通过url设置该参数,但如果使用SSRS web服务生成报告,则可以。

我希望我没有误解您的意图,但如果您只想让SSRS显示一个简单的表,可以让它生成一个表对象-无需生成XML.RDL文件。但是,托管和执行的报告中有一个导出到XML选项

如果您只想允许用户动态添加记录,那么我现在也在做类似的事情,这就是我的解决方案。我很抱歉,这是相当低沉和复杂的,但当我没有时间进行更优雅的演示时,它对我来说真的很好

第一: UDF获取所需发票号的分隔字符串并转换为可搜索文本数组

CREATE FUNCTION [dbo].[fnDelimitedListToVarcharTableVariable]
(
    @DelimitedList nvarchar(max),
    @Delimiter varchar(1)
)
RETURNS @tbl table(SplitValues nvarchar(max))
AS
BEGIN
    DECLARE @DelimiterPos int
-- Find the first comma
    SET @DelimiterPos = PATINDEX( '%,%', @DelimitedList)
-- If a delimiter was found, @DelimiterPos will be > 0.
    WHILE @DelimiterPos > 0
        BEGIN
-- Insert the value between the start of the string and the first delimiter, into the table variable.
            INSERT INTO @tbl(SplitValues) SELECT CAST(LTRIM(RTRIM((SUBSTRING(@DelimitedList, 1, @DelimiterPos -1)))) AS nvarchar(max))
-- Trim the string of the first value and delimiter.
            SET @DelimitedList = SUBSTRING(@DelimitedList, @DelimiterPos +1, LEN(@DelimitedList) - @DelimiterPos)
-- Look for the next delimiter in the string.
            SET @DelimiterPos = PATINDEX( '%,%', @DelimitedList)
        END
-- Ensure the last / only value in the @DelimitedList string gets inserted into the table variable.
    INSERT INTO @Tbl(SplitValues) SELECT CAST(LTRIM(RTRIM((@DelimitedList))) AS nvarchar(max))
    RETURN
END;
第二: 在SSRS报告中创建一个名为param_DelimitedList的参数。它应该是文本数据类型,默认值为空字符串

第三: 创建数据集

Create proc spGetInvoices
    @param_DelimitedList varchar( max )
as
begin
    Select
        tbl.InvoiceNumber
        ,tbl.*
    from MyTable tbl
    where cast( tbl.InvoiceNumber as varchar(max) ) in ( select SplitValues from dbo.fnDelimitedListToVarcharTableVariable( @param_DelimitedList, ',' ) );
end;
第四: 在SSRS报告中使用数据集spGetInvoices中的所需字段创建Tablix表对象

用户应该能够在参数框中输入发票编号列表,并将相应的数据返回到Tablix表对象

该代码在SQLServer2008-R2和ReportBuilder3.0中运行良好。我希望它能帮助你