我目前正在开发一个 ssis 自定义组件,在设计时我创建了一个用户变量并在我想要的任何时候更新它。
现在,当我执行包时,在 PrimeOutput
方法中我成功更新了变量,但是当进程终止时变量不是持久的,我得到的唯一值是旧值。
这是我更新变量的方式:
IDTSVariables100 variables = null;
VariableDispenser.LockOneForWrite(name, ref variables);
variables[name].Value = newValue;
variables.Unlock();
最佳答案
假设你的变量名是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();
有关更多信息,您可以引用这个有用的链接:
- http://microsoft-ssis.blogspot.com/2011/01/how-to-use-variables-in-script.html
- https://hernandezpaul.wordpress.com/2012/12/14/read-and-write-variables-in-a-script-component-in-ssis-sql-server-integration-services-using-c/
更新 1
阅读您的评论后 “但在包执行完毕后,变量重置为旧值”
默认情况下存储在包文件中的变量值是您在设计包时指定的值(以编程方式或使用 visual studio)
此外,如果在脚本中更改变量值,它只会在执行时更改值,并且无法从同一 DataFlow Task
中的另一个组件读取新值,该值将在当前DataFlow Task
执行完毕
有用的链接
如果您有兴趣以编程方式编辑包,您可以引用以下链接
- https://learn.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/creating-a-package-programmatically
- https://learn.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/working-with-variables-programmatically
- How to edit SSIS packages programatically in VB?
关于c# - 在进程终止时更新 SSIS 自定义组件中的变量不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43388037/