如何在SSIS脚本任务中传递自定义对象列表?

我有一个脚本任务,该任务创建一个自定义对象列表并将它们设置为SSIS对象变量.

自定义类:

public class Dog
{
    public string Name { get; set; }
}

填充列表并将其设置为SSIS对象变量“ myDogs”的代码:

public void Main()
{
    List<Dog> dogs = new List<Dog>();

    Dog dog1 = new Dog();
    dog1.Name = "Fido";

    Dog dog2 = new Dog();
    dog1.Name = "Roofus";

    dogs.Add(dog1);
    dogs.Add(dog2);

    Dts.Variables["myDogs"].Value = dogs;
}

在第二个脚本任务中,我试图将我的“ myDogs”对象变量读回到列表中:

在第二个脚本任务中复制的自定义类:

public class Dog
{
    public string Name { get; set; }
}

我的第二个脚本任务中的主要代码:

public void Main()
{
    var varDogs = Dts.Variables["myDogs"].Value;
    List<Dog> dogs = new List<Dog>();

    dogs = (List<Dog>)varDogs;
}

我的varDogs对象从SSIS对象变量“ myDogs”正确加载了数据.但是,当我尝试将varDogs强制转换为Dog类型的列表时,我收到一条错误消息,提示“无法强制转换System.Collections.Generic.List类型的对象”.

有谁知道我将如何将该var数据重新投射到列表中?谢谢.

解决方法:

在尝试任何其他操作之前,请将自定义类编译为.dll,然后将其安装到GAC(全局程序集缓存)中.在与自定义对象进行交互时,SSIS确实很挑剔,并且希望在那里找到对它们的引用.可以找到here的GAC安装的MSDN示例.安装.dll后,只需在脚本任务中将其引用即可,SSIS会自动搜索GAC签名.

这是在SSIS中管理自定义对象的正确方法,因为您在两个脚本任务中都引用一个类.尽管当前的两个脚本任务之间的类相同,但是您的错误表明它们来自单独的命名空间.

正如其他人所建议的那样,序列化是可行的,但这至少是一个棘手的解决方案,因为您必须在两面都维护类(脚本任务1和脚本任务2).在开始使用复杂类型之前,最好先熟悉本机SSIS解决方案:)

上一篇:javascript – 循环雪花阵列


下一篇:c#-BIDS和VS中的SSIS自定义控制任务调试UI