2014-09-09 2 views
2

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

Я проверил, дважды и трижды проверил списки переменных в переменных Read Only и Read-Write в моей задаче Script. Я отладил его до смерти и получил вход от другого программиста, который тоже не мог определить проблему. Я также исследовал их до конца. Кто-нибудь видел ли что-нибудь неправильно с моим кодом:

Script код задачи:

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 
+0

Я не думаю, что вам нужна «User ::» часть имен переменных. Мы успешно используем такой код, чтобы ссылаться на переменные: Dts.Variables («Таблицы»). Значение –

+0

Хм, я всегда использовал его, и мне сказали, что это хорошая практика. – Isaac

+0

Ваш скрипт создает перечисление ScriptResults и включает в себя «Успех»? Вы не показываете это. –

ответ

1

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

В списке отсутствует strFooter.

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

3

У меня была такая же проблема и не удалось найти проблему на века. Я обнаружил, что причиной ошибки было то, что я пропустил один из двоеточий между «User» и именем переменной.

Я это (что вызвало ошибку):

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

, когда я должен был это:

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

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

0

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

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

+1

На самом деле это не отвечает на все, с чем у пользователя возникают проблемы. В образце кода пользователь правильно использует 'User ::'. – mikeyq6

6

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

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

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

  1. правой кнопкой мыши на пакете и выберите Edit
  2. В разделе сценария нажмите на ReadOnlyVariables или ReadWriteVariables (в зависимости от как вы хотите, чтобы ваши переменные ведут себя)
  3. Проверьте чек- поле рядом с переменными, которые вы хотите использовать в задаче сценария
  4. Щелкните Ok, чтобы сохранить изменения

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