0

ScriptTask で次のコードを実行して、SSIS 変数の値を単純に変更しようとしています。

        string path = Dts.Connections["BazyPobrane"].ConnectionString.ToString();
        string[] nameZIParray = Directory.GetFiles(path, "*.ZIP");
        string[] nameRARarray = Directory.GetFiles(path, "*.RAR");

        foreach (string nameZIP in nameZIParray) //search new ZIP
        {
            if (File.GetCreationTime(nameZIP) > DateTime.Now.AddDays(-1))
            {
                Dts.Variables["User::NazwaPliku"].Value = Path.GetFileName(nameZIP);
            }

        }
        foreach (string nameRAR in nameRARarray) //search new RAR
        {
            if (File.GetCreationTime(nameRAR) > DateTime.Now.AddDays(-1))
            {
                Dts.Variables["User::NazwaPliku"].Value = Path.GetFileName(nameRAR);
            }

        }
        Dts.TaskResult = (int)ScriptResults.Success;

ScriptTask を実行した後は、単に変数 Value を変更しません。デバッグモードは問題ないようです。多分私はいくつかのコンポーネント設定を見逃していますか? どうも!

4

2 に答える 2

1

確認事項:

  1. 変数が変化していないと確信していますか?MessageBox を配置して後続のスクリプト タスクを配置すると、正しい値が表示されますか?

  2. 変数タイプ、つまり「user::」を削除する必要はないと思います

  3. @OcasoP で提案されているように、変数が ReadWriteVariables プロパティにあることを確認してください

  4. 変数のスコープは?異なるスコープに 2 つのコピーがないこと、または少なくとも 1 つのコピーがスクリプトのスコープから見えることを確認してください。

  5. 変数に書き込む前に変数をロックしてみることができます (これは上記の (3) と同等である必要があります)。

最後のポイントのコード例:

IDTSVariables100 variables = null;
this.VariableDispenser.LockOneForWrite("NazwaPliku",ref variables);
variables[0].Value = myValue;
variables.Unlock();
于 2012-04-11T13:39:40.587 に答える
0

MsgBox(variable_name) を追加するスクリプト タスクをデバッグし、実行を通じてその値を確認します。最適なデバッグ オプション:)

于 2012-04-11T13:51:18.777 に答える