web-dev-qa-db-ja.com

SSIS要素がコレクションに見つかりません(ただし、すべてリストされています!)

永続的なエラーが発生します:

要素がコレクションに見つかりません。
このエラーは、パッケージの実行中にコンテナ上のコレクションから要素を取得しようとしたときに、その要素が存在しない場合に発生します。

スクリプトタスクの読み取り専用変数と読み取り/書き込み変数の変数リストをチェック、ダブル、トリプルチェックしました。私はそれをデバッグして死に至らしめ、問題を見つけることができなかった別のプログラマーから入力を得ました。私も終わりのない研究をしました。

  • 誰かが私のコードに何か問題があると思いますか?

スクリプトタスクコード:

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
8
Isaac

ああ…………男。このようなものをじっと見つめ、何時間も愚かなことを見逃すことができるのは驚くべきことです。

strFooterがリストにありませんでした。

すべて設定しました。見てコメントしてくださった方々に心から感謝します。エリック、ありがとう、たまにVB(まだですがそうします)のCinsateadを使用する必要があるかもしれないことを覚えています。

1
Isaac

この問題に苦しんでいる他の人にとって、私にとっての解決策は次のとおりでした:(スクリプトタスク内で変数値を取得するときにUser::を使用していないことに注意してください)

  • パッケージのプロパティで、変数をReadOnlyVariablesとして含めていませんでした

新しく追加した変数を次のように設定する必要があります。

  1. パッケージを右クリックして、編集を選択します
  2. スクリプトセクションで、ReadOnlyVariablesまたはReadWriteVariablesをクリックします(変数の動作に応じて)
  3. スクリプトタスクで使用する変数の横にあるチェックボックスをオンにします
  4. OKをクリックして変更を保存します

お役に立てれば

13
P_Fitz

私はちょうど同じ問題を抱えていて、何年もの間問題を見つけることができませんでした。エラーの理由は、「User」と変数名の間のコロンの1つを見逃したことが原因であることがわかりました。

私はこれを持っていました(それはエラーを引き起こしました):

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

私がこれを持っているべきだったとき:

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

他の誰かが同じ問題を抱えている場合に備えて:)

5

同様の問題がありましたが、多くのデバッグを行った後、変数の命名規則はUser :: varnameでありNOTUSER :: varnameである必要があることに気付きました。c#では大文字と小文字が非常に区別されると思います。

これがあなたの貴重な時間をたくさん節約するのに役立つことを願っています:-)

0