在集合中找不到SSIS元素(但我列出了它们!)

时间:2014-09-09 18:14:22

标签: variables ssis dts

我收到了持续错误:

  

在集合中找不到该元素   当您尝试在执行包期间从容器上的集合中检索元素并且该元素不存在时,会发生此错误。

我已经在我的脚本任务中的只读和读写变量中检查,双重和三重检查了我的变量列表。 我已将其调试至死,并从另一位无法发现问题的程序员那里得到了意见。 我也一直在努力研究。

  • 有人看到我的代码有什么问题吗?

脚本任务代码:

Public Sub Main()
    Dts.Variables("User::strMailBody").Value = "Thank you for submission. For your convenience, we are including the last four of the HICN# and the Name on the application(s) we have received* from you." _
        & vbNewLine & vbNewLine & "Here are the following: " & vbNewLine & vbNewLine
    Dts.Variables("User::strMailBody").Value = Dts.Variables("User::strMailbody").Value.ToString() & vbNewLine & Dts.Variables("User::strListing").Value.ToString()
    Dts.Variables("User::strMailBody").Value = Dts.Variables("User::strMailBody").Value.ToString() & vbNewLine & vbNewLine & Dts.Variables("User::strFooter").Value.ToString()

    If Left(Dts.Variables("User::strAgentID").Value, 2) = "TX" Then
        Dts.Variables("User::strSubject").Value = "ACME Health Plans Confirmation:  Total "
    Else
        Dts.Variables("User::strSubject").Value = "ACME2 Baptist Health Plans Confirmation:  Total "
    End If

    Dts.Variables("User::strSubject").Value = Dts.Variables("User::strSubject").Value.ToString() & Dts.Variables("User::lngCountAgent").Value.ToString() & "   " & "[RESTRICTED: CONFIDENTIAL]"
    Dts.Variables("User::DateSent").Value = Now()
    Dts.Variables("User::UserSent").Value = "SSIS"

    Dts.TaskResult = ScriptResults.Success
End Sub

4 个答案:

答案 0 :(得分:13)

对于其他正在努力解决此问题的人,我的解决方案如下:(注意我在脚本任务中获取变量值时不使用User::

  • 在包属性上我没有将变量包含在ReadOnlyVariables

您需要按如下方式设置新添加的变量:

  1. 右键单击包并选择修改
  2. 在“脚本”部分中,点击 ReadOnlyVariables ReadWriteVariables (取决于您希望变量的行为方式)
  3. 选中要在脚本任务中使用的变量旁边的复选框
  4. 点击确定以保存更改
  5. 希望这有帮助

答案 1 :(得分:5)

我刚遇到同样的问题,无法找到问题多年。我发现错误的原因是我错过了“用户”和变量名之间的一个冒号。

我有这个(导致错误):

string FileName = UserVariables["User:CurrentFileName"].Value.ToString();

我什么时候应该这样:

string FileName = UserVariables["User::CurrentFileName"].Value.ToString();

以防其他人遇到同样的问题:)

答案 2 :(得分:1)

哦~~ .........人。令人惊讶的是,你可以盯着这些东西,想念一些愚蠢的东西,好几个小时。

列表中缺少

strFooter。

现在全部设定。真诚地感谢那些看过和评论过的人。埃里克,谢谢,我会记得,有时候我可能需要使用VB的C insatead(还没有,但是会)。

答案 3 :(得分:0)

有一个类似的问题,经过大量的调试,意识到变量命名约定应该是User :: varname和NOT USER :: varname 我猜c#非常区分大小写。

希望这有助于节省您宝贵的时间: - )