SSIS包:无法将System.Object转换为List(Of String)以便在Package变量中存储?

时间:2011-11-14 20:12:36

标签: .net ssis

我有一个SSIS包,根据特定标准向用户发送电子邮件,我现在想跟踪以这种方式通知的所有用户,并将摘要发送给我们的一个团队。我想将变量中通知的用户名存储为List(Of String),但我似乎无法在脚本任务中执行此操作,这是我的代码:

Public Sub Main()
    Dim vars As Variables
    If Dts.Variables("Users").Value Is Nothing Then
        Dim users As New List(Of String)
        users.Add("Enrollees: \n")
        Dts.VariableDispenser.LockOneForWrite("Users", vars)
        vars.Item("Users").Value = users
    End If

    'errors out on this line
    Dim userList As List(Of String) = DirectCast(Dts.Variables("Users").Value, List(Of String))
    'errors out on this line

    userList.Add(Dts.Variables("FirstName").Value.ToString() & " " & Dts.Variables("LastName").Value.ToString() & " (" & Dts.Variables("Email").Value.ToString() & " )\n")
    Dts.VariableDispenser.LockOneForWrite("Users", vars)
    vars.Item("Users").Value = userList

    Dts.TaskResult = Dts.Results.Success
End Sub

变量Users设置为Object类型,我知道你可以在其中存储复杂类型,因为我已经在其中存储了ADO.NET记录集,但我从未在代码中通过脚本任务这样做。我也尝试了CType,它也给出了同样的错误。我做错了什么?

另外我知道我可以将变量以逗号分隔的形式存储在字符串中并稍后拆分,但我想知道为什么这不起作用并坚持使用更基于对象的方法。

感谢。

1 个答案:

答案 0 :(得分:2)

问题是Users变量从未设置为List(Of String) - 但它也不是Nothing。相反,SSIS已将其初始化为System.Object,当然无法强制转换为List(Of String)

Public Sub Main()
    Dim msg As String
    If Dts.Variables("Users").Value Is Nothing Then
        msg = "Dts.Variables(""Users"").Value is Nothing"
    Else
        msg = "Dts.Variables(""Users"").Value is an object of type " + Dts.Variables("Users").Value.GetType().FullName
    End If
    Dts.Events.FireInformation(0, "Main", msg, "", 0, True) ' Information: Dts.Variables("Users").Value is an object of type System.Object

    ' rest of your code follows

幸运的是,您需要做的就是在某个地方的脚本任务中将用户初始化为List(Of String)