Элемент 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
Вам нужно будет установить вновь добавленные переменные следующим образом:
- Щелкните правой кнопкой мыши на пакете и выберите " Изменить".
- В разделе "Сценарий" щелкните ReadOnlyVariables или ReadWriteVariables (в зависимости от того, как вы хотите, чтобы ваши переменные вели себя)
- Установите флажок рядом с переменными, которые вы хотите использовать в своей задаче скрипта
- Нажмите 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