Элемент SSIS не может быть найден в ошибке коллекции - но у меня есть все они в списке

Я получаю постоянную ошибку: "Элемент не может быть найден в коллекции. Эта ошибка возникает, когда вы пытаетесь извлечь элемент из коллекции в контейнере во время выполнения пакета, а элемент отсутствует".

Я проверил, дважды и трижды проверил список переменных в переменных "Только чтение" и "Чтение-запись" в моей задаче "Сценарий". Я отладил его до смерти и получил информацию от другого программиста, который тоже не смог определить проблему. Я также исследовал без конца. Кто-нибудь видит что-то не так с моим кодом:

Код задачи скрипта:

Public Sub Main()
    '
    ' Add your code here
    '
    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

6 ответов

Решение

Ооооо......... человек. Удивительно, как ты можешь смотреть на это и часами пропускать что-то глупое.

strFooter отсутствовал в списке.

ВСЕ УСТАНОВЛЕНО СЕЙЧАС. Искреннее спасибо тем, кто посмотрел и прокомментировал. Эрик, спасибо, я буду помнить, что иногда мне, вероятно, нужно будет использовать C вместо VB (пока нет, но буду).

Для всех, кто боролся с этой проблемой, решение для меня было следующим: (обратите внимание, я не использую User:: при получении значений переменных внутри моей задачи скрипта)

  • В свойствах пакета я не включил переменные как ReadOnlyVariables

Вам нужно будет установить вновь добавленные переменные следующим образом:

  1. Щелкните правой кнопкой мыши на пакете и выберите " Изменить".
  2. В разделе "Сценарий" щелкните ReadOnlyVariables или ReadWriteVariables (в зависимости от того, как вы хотите, чтобы ваши переменные вели себя)
  3. Установите флажок рядом с переменными, которые вы хотите использовать в своей задаче скрипта
  4. Нажмите Ok, чтобы сохранить изменения

Надеюсь это поможет

У меня просто была такая же проблема, и я не мог найти проблему целую вечность. Я обнаружил, что причиной ошибки было то, что я пропустил один из двоеточий между "Пользователь" и именем переменной.

У меня было это (что вызвало ошибку):

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

когда я должен был иметь это:

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

на всякий случай, у кого-то еще есть такая же проблема:)

Если после многих отладок возникла похожая проблема, то понял, что соглашение об именовании переменных должно быть User::varname и NOT USER::varname. Я думаю, C# очень чувствителен к регистру.

Надеюсь, это поможет вам сэкономить ваше драгоценное время:-)

a) Щелкните правой кнопкой мыши задачу скрипта и выберите «Редактировать». b) Найдите в списке свойства переменных «Чтение» или «Чтение/запись».c) Нажмите на свойство и переменную, к которой вы хотите получить доступ в задаче скрипта.

Еще одна вариация на тему «слишком долго смотрел на экран, чтобы увидеть опечатку». В моем случае я получил ту же ошибку, перепутав синтаксис между параметрами проекта и пользовательскими переменными и добавив знак $ перед пользователем.

ошибка :

      string varA = (string)Dts.Variables["$Project::ParamA"].Value
string varB = (string)Dts.Variables["$User::ParamB"].Value

исправленный :

      string varA = (string)Dts.Variables["$Project::ParamA"].Value
string varB = (string)Dts.Variables["User::ParamB"].Value
Другие вопросы по тегам