0

我尝试简单地更改 SSIS 变量的值,在 ScriptTask 中执行此代码:

        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 后,它根本不更改变量值。调试模式似乎很好。也许我错过了一些组件设置?谢谢!

4

2 回答 2

1

需要检查的一些事项:

  1. 你确定变量没有改变吗?如果您使用 MessageBox 放置后续脚本任务,它是否显示正确的值?

  2. 我认为您不需要变量类型,即删除“user::”

  3. 确保变量位于 ReadWriteVariables 属性中,正如@OcasoP 所建议的那样

  4. 变量的范围是什么?确保您没有不同范围的两个副本,或者至少您拥有的副本在脚本范围内是可见的

  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 回答