【问题标题】:Passing C# parameters to a stored procedure report将 C# 参数传递给存储过程报告
【发布时间】:2012-10-26 16:30:09
【问题描述】:

我正在尝试触发报告运行,其中“全选”检查了字段 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, ',')))

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

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

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

【问题讨论】:

  • 请编辑您的问题并添加以某种方式从问题中消失的 C# 代码部分(有“我的 c# 代码 ...is”句子,但没有 C# 代码)。

标签: c# report


【解决方案1】:

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

创建函数
    [dbo].[GetItemTable]
    (
    @Items VARCHAR(1000)
    )
回报
    @ItemTable 表
    (
    RowID INT IDENTITY(1,1) 主键,
    项目 VARCHAR(30)
    )
作为
开始

    声明 @ProcessItems VARCHAR(1000)
    声明 @CurrentItem VARCHAR(30)

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

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

        WHILE CHARINDEX(',', @ProcessItems) > 0
        开始

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

            插入
                @ItemTable
                (
                物品
                )
            价值观
                (
                @CurrentItem
                )

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

        END -- 计划时

    返回
结束

显然,您可以将当前项目大小更改为您碰巧需要的大小。

然后像这样使用它:

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

【讨论】:

    【解决方案2】:

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

    你能试试这个吗...

    ALTER PROCEDURE [dbo].[...] @FiscalYearId varchar (100) = null , ...选择...在哪里...和 (@FiscalYearID 为 NULL 或 p.FiscalYearId IN (@FiscalYearID))

    此外,如果您发送“全选”字符串,您可能需要在过程中设置一个条件来检查该条件并将查询更改为“从会计年度表中选择 id”

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2011-07-22
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多