将C#参数传递给存储过程报告

时间:2012-10-26 16:30:10

标签: c# report

我正在尝试触发运行报告,并选中“select all”字段FiscalYearId,这是一种字符串类型。我可以成功传递一个字符串,如“2”,报告将找到它。但是,当我尝试传递“全部选择”或“2,3,4”时,多重检查字段不会对此进行检测。

以下是报告中存储过程的一部分:

ALTER PROCEDURE [dbo].[...]
@FiscalYearId varchar (100) = null ,
...
select ...
where ...
and (@FiscalYearID IS NULL OR p.FiscalYearId IN (SELECT * FROM SPLIT(@FiscalYearID, ',')))

我的c#代码触发报告在radwindow中弹出:

`string years = "2,3,4";
newWindow.NavigateUrl = "../Reporting/SingleReport.aspx?Report=AdHocSourcingReport&VendorID=" 
+ vendorId + "&VendorReport=true" + "&FiscalYearId="+years;`

目前,vendorId字符串和VendorReport布尔值成功完成,它是由逗号分隔的字符串,在运行报表时不会填充。我最初尝试发送一个“全选”,这就是我想要的......非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

这就是我过去处理分割逗号分隔字符串的方式:

CREATE FUNCTION 
    [dbo].[GetItemTable] 
    (
    @Items VARCHAR(1000)
    )
RETURNS 
    @ItemTable TABLE 
    (
    RowID INT IDENTITY(1,1) PRIMARY KEY,
    item VARCHAR(30)
    )
AS
BEGIN

    DECLARE @ProcessItems VARCHAR(1000)
    DECLARE @CurrentItem VARCHAR(30)

    SET @ProcessItems = REPLACE(@Items, '''', '')

    IF SUBSTRING(@ProcessItems, LEN(@ProcessItems), 1)  ','
        SET @ProcessItems = @ProcessItems + ','

        WHILE CHARINDEX(',', @ProcessItems) > 0
        BEGIN

            SET @CurrentItem = LTRIM(CAST(SUBSTRING(@ProcessItems, 0, CHARINDEX(',', @ProcessItems)) AS VARCHAR(30)))

            INSERT INTO 
                @ItemTable 
                (
                item
                ) 
            VALUES
                (
                @CurrentItem
                )

            SET @ProcessItems = SUBSTRING(@ProcessItems, CHARINDEX(',', @ProcessItems) + 1, LEN(@ProcessItems))

        END -- While Schedule   

    RETURN 
END

显然,您可以将当前项目大小更改为您需要的任何内容。

然后就这样使用它:

WHERE (p.FiscalYearId IN(SELECT item FROM dbo.GetItemTable(@FiscalYearID)))

答案 1 :(得分:0)

我记得几年前做过类似的事情并且列表中存在同样的问题。

你可以尝试一下......

ALTER PROCEDURE [dbo].[...] @FiscalYearId varchar (100) = null , 
... select... where... and 
(@FiscalYearID IS NULL OR p.FiscalYearId IN (@FiscalYearID))

此外,如果您要发送“全选”字符串,则可能需要在程序中设置一个条件来检查并将查询更改为“从fiscalyeartable中选择ID”

相关问题