我目前正在开发一个ssis自定义组件,在设计时我会创建一个用户变量,并在我想要的任何时候更新它。
现在,当我执行包时,在PrimeOutput
方法中我成功更新了变量,但是当进程终止时,变量不是持久的,我得到的唯一值是旧值。
这是我如何更新变量:
IDTSVariables100 variables = null;
VariableDispenser.LockOneForWrite(name, ref variables);
variables[name].Value = newValue;
variables.Unlock();
答案 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时完成执行
有用的链接
如果您有兴趣以编程方式编辑包,可以参考以下链接