You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS脚本任务中遍历用户变量内的自定义类集合提取属性

解决SSIS中遍历自定义对象ArrayList变量的问题

一、先修正主脚本任务的变量作用域问题

你当前的主脚本任务中,wopList是在InputWOProduct_ProcessInputRow方法内部定义的,每次处理行数据时都会新建一个ArrayList,最终赋值给变量的只会是最后一次创建的空/单元素集合。需要将wopList提升为脚本任务类的成员变量,才能累积所有行的对象:

// 在脚本任务类的顶部定义成员变量
private ArrayList wopList = new ArrayList();

public override void InputWOProduct_ProcessInputRow(InputWOProductBuffer Row)
{
    WorkOrderProduct wop = new WorkOrderProduct();
    wop.workOrderId = pWorkOrderID;
    wop.workOrderProductId = pWorkOrderProductID;
    wopList.Add(wop);
}

二、在第二个脚本任务中遍历变量的步骤

1. 确保自定义类可访问

如果两个脚本任务属于同一SSIS项目,建议将WorkOrderProduct类定义在项目级脚本文件中(右键项目→添加→新建项→脚本文件),这样所有脚本任务都能直接引用。如果是独立脚本任务,需要在第二个脚本任务的代码中重新定义完全一致的类:

public class WorkOrderProduct
{
    public Guid workOrderId;
    public Guid workOrderProductId;
    public static Guid WorkOrderId { get; set; }
    public static Guid WorkOrderProductId { get; set; }
}

2. 遍历并转换元素类型

由于ArrayList是弱类型集合,存储的元素默认是object类型,必须强制转换为WorkOrderProduct后才能访问其成员。在第二个脚本任务的Main方法中编写如下代码:

public void Main()
{
    bool fireAgain = true;
    // 读取变量并转换为ArrayList
    ArrayList wopList = Dts.Variables["User::WorkOrderProductIdList"].Value as ArrayList;

    if (wopList != null && wopList.Count > 0)
    {
        foreach (var item in wopList)
        {
            // 将object强制转换为WorkOrderProduct
            WorkOrderProduct wop = item as WorkOrderProduct;
            if (wop != null)
            {
                // 访问实例字段(注意是小写的workOrderId,不是静态的WorkOrderId)
                Guid workOrderId = wop.workOrderId;
                Guid workOrderProductId = wop.workOrderProductId;

                // 示例:输出到SSIS日志
                Dts.Events.FireInformation(0, "遍历WorkOrderProduct", $"WorkOrderId: {workOrderId}, WorkOrderProductId: {workOrderProductId}", "", 0, ref fireAgain);
            }
        }
    }

    Dts.TaskResult = (int)ScriptResults.Success;
}

关键说明

ArrayList中的元素默认是object类型,无法直接通过点操作符访问WorkOrderProduct的成员,必须通过强制类型转换将元素转为具体的WorkOrderProduct类型,才能正常访问其字段或属性。

内容的提问来源于stack exchange,提问作者gymcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:13:59