更新SSIS中的变量自定义组件在进程终止时不是持久的

时间:2017-04-13 09:09:41

标签: c# sql-server ssis custom-component

我目前正在开发一个ssis自定义组件,在设计时我会创建一个用户变量,并在我想要的任何时候更新它。

现在,当我执行包时,在PrimeOutput方法中我成功更新了变量,但是当进程终止时,变量不是持久的,我得到的唯一值是旧值。 这是我如何更新变量:

IDTSVariables100 variables = null;
VariableDispenser.LockOneForWrite(name, ref variables);
variables[name].Value = newValue;
variables.Unlock();

1 个答案:

答案 0 :(得分:1)

假设您的变量名称为MyVar

 VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
 variableDispenser.LockForWrite("User::myVar");

 IDTSVariables100 vars;
 variableDispenser.GetVariables(out vars);

 // Set the variable
 vars["User::myVar"].Value = newValue;

 // Unlock the variable
 vars.Unlock();

有关详细信息,请参阅以下有用链接:

更新1

阅读评论"but after the package finish executing, the variable reset to the old value"

默认情况下,存储在包文件中的变量值是您在设计包(以编程方式或使用visual studio)时指定的值

此外,如果更改脚本中的变量值,它将仅在执行时更改该值,并且无法从同一DataFlow Task内的另一个组件中重新读取新值,当Current {{1时完成执行

有用的链接

如果您有兴趣以编程方式编辑包,可以参考以下链接