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

标签 c# sql-server ssis custom-component

我目前正在开发一个 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();

有关更多信息,您可以引用这个有用的链接:

更新 1

阅读您的评论后 “但在包执行完毕后,变量重置为旧值”

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

此外,如果在脚本中更改变量值,它只会在执行时更改值,并且无法从同一 DataFlow Task 中的另一个组件读取新值,该值将在当前DataFlow Task执行完毕

有用的链接

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

关于c# - 在进程终止时更新 SSIS 自定义组件中的变量不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43388037/

相关文章:

c# - 如何制作一个整数数组的列表?

c# - 从没有数据的查询中获取列名

sql - 在不使用数据转换的情况下更新 ssis 中的表

sql-server - SQL Server 的 SET NOEXEC 或 NOPARSE 的 Oracle 等效项是什么?

java - SQL中如何将&替换为&?

sql - 更新部署的 SSIS 包

c# - 使用 SSIS 数据流任务从平面文件源以编程方式派生列

c# - 将传递的对象转换为某种东西

c# - Azure Durable Function - 在 Orchestrator 中执行操作

c# - PerformanceCounter CPU 使用率值始终为 0