0

ForEachいくつかのファイルをループで処理している SSIS パッケージがあります。ループには、処理を行うデータ フロー タスクがあります。maxerror countループの を に設定することで、不良ファイルがあってもループが停止しないようにしています0ON ERRORループ コンテナーのイベント ハンドラーでスクリプト タスクを使用して、メッセージ ボックスでエラーをキャッチしようとしました。1 つのエラーを取得する代わりに、3 つのエラーを取得します。 データ フローのイベントでにPopagate設定されます。助けてください。falseOnPostExecute

メイン パッケージ - ループ タスク - データ フロー タスク ここに画像の説明を入力

4

1 に答える 1

1

script taskforon Errorイベント ハンドラーで 1 つ以上のエラーが発生する理由は、コンテナーの子コントロール内でエラーが発生した場合、イベントが から に発生Data Flow taskし、それがForEachさらに に運ばれるためですpackage level。この場合、子コンポーネントの設定に設定しているため、機能しません。propogatefalseMaximumErrorCount0 overridespropogate

通常、DFT のイベント ハンドラーのスクリプト タスクで1 つのErrorCount変数を作成しようとします。カウントを確認します。type int

if (int.Parse(Dts.Variables["User::ErrorCount"].Value.ToString ()) == 0)
        {
            Dts.Variables["User::ErrorCnt"].Value = 1;
            //Do your logging operation or any operation
        }

したがって、このようにして初めてイベント ハンドラーが起動され、変数ErrorCountが 1 に設定されるため、DFT の後続のエラーはスクリプト タスク内の IF 条件に失敗します。

ForEach ループ内にコンポーネントが 1 つしかない場合は、以下のいずれかの方法を使用することをお勧めします

  1. MaxErrorCountForEach ループのプロパティ

  2. event handlerDFT.Setpropogate変数を作成しFalse、上記のコードを記述してエラーの数を確認します。

私は通常、Setting の代わりに 2 番目の方法を使用する傾向があります。MaxErrorCountこれにより、個々のコンポーネント レベルのエラーをより柔軟に処理できるからです。

詳細については、SSIS のイベント ハンドラーがどのように機能するかを説明しているこのMSDN リンクを確認してください。

于 2013-03-05T11:28:51.123 に答える