永続的なエラーが発生します:
要素がコレクションに見つかりません。
このエラーは、パッケージの実行中にコンテナ上のコレクションから要素を取得しようとしたときに、その要素が存在しない場合に発生します。
スクリプトタスクの読み取り専用変数と読み取り/書き込み変数の変数リストをチェック、ダブル、トリプルチェックしました。私はそれをデバッグして死に至らしめ、問題を見つけることができなかった別のプログラマーから入力を得ました。私も終わりのない研究をしました。
スクリプトタスクコード:
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
ああ…………男。このようなものをじっと見つめ、何時間も愚かなことを見逃すことができるのは驚くべきことです。
strFooterがリストにありませんでした。
すべて設定しました。見てコメントしてくださった方々に心から感謝します。エリック、ありがとう、たまにVB(まだですがそうします)のCinsateadを使用する必要があるかもしれないことを覚えています。
この問題に苦しんでいる他の人にとって、私にとっての解決策は次のとおりでした:(スクリプトタスク内で変数値を取得するときにUser::
を使用していないことに注意してください)
新しく追加した変数を次のように設定する必要があります。
お役に立てれば
私はちょうど同じ問題を抱えていて、何年もの間問題を見つけることができませんでした。エラーの理由は、「User」と変数名の間のコロンの1つを見逃したことが原因であることがわかりました。
私はこれを持っていました(それはエラーを引き起こしました):
string FileName = UserVariables["User:CurrentFileName"].Value.ToString();
私がこれを持っているべきだったとき:
string FileName = UserVariables["User::CurrentFileName"].Value.ToString();
他の誰かが同じ問題を抱えている場合に備えて:)
同様の問題がありましたが、多くのデバッグを行った後、変数の命名規則はUser :: varnameでありNOTUSER :: varnameである必要があることに気付きました。c#では大文字と小文字が非常に区別されると思います。
これがあなたの貴重な時間をたくさん節約するのに役立つことを願っています:-)