【问题标题】:How do you change the value of the a SSIS variable within the package using Script Component in Data Flow如何使用数据流中的脚本组件更改包内 SSIS 变量的值
【发布时间】:2021-01-20 11:42:16
【问题描述】:

我正在下载一个 json 文件,并使用数据流和脚本组件对象成功地将其放入表中。

在我的 json 文件中,有我应该导入的数字行计数以及导入数据需要多少页。

例如 “计数”:1925, “当前页面”:1, “总页数”:2, “结果”:

我在我的 url 上获取 json 文件,我必须指定我要获取的页面。 例如&page=" + 页号

我想自动化我的 SSIS 包来执行此操作。我已经设法分配用户变量以获取导入的计数行,通过使用脚本组件中的读写功能通过在 Post Execute 区域中分配要导入的行计数。

我想使用 For Loop 容器来循环数据流并继续导入数据,直到导入的行数等于要导入的行数。

我的问题是当我执行控制流时,我不断收到错误

为读写访问锁定的变量集合在 PostExecute 之外不可用。

如何更改变量以便我可以在 for 循环容器中使用它们?

根据 Brad 的要求添加了代码。

public override void PostExecute()
{
    base.PostExecute();
   
    Variables.RowsImported = i;
    Variables.RowsTobeImported = totalcount;

    if (totalcount > i)
        Variables.PageNoExtra = Variables.PageNoExtra + 1;

    MessageBox.Show(Variables.RowsImported.ToString());
    MessageBox.Show(Variables.RowsTobeImported.ToString());
    //MessageBox.Show(Variables.PageNoExtra.ToString());
}

【问题讨论】:

  • 您如何访问脚本任务中的变量?我已经通过几种不同的方式访问它们(在脚本任务编辑器框中将它们指定为只读或读/写),或者您可以直接从 c# 代码访问它们而不执行此操作(尽管目前我无法找到我所做的代码这个)但如果你提供你是如何做的,我们可能会提供更好的帮助。
  • 我正在使用数据流任务中的脚本组件来分配变量,但是在数据流完成将数据传输到SQL表后它们就丢失了。

标签: c# ssis dataflow script-task script-component


【解决方案1】:

您的问题似乎是访问 PostExecute 中的变量,请将其移到 PostExecute 之外。我从脚本任务中访问变量,如下面的代码示例。我之前以不同的方式访问它时遇到问题,但我不记得这个问题,但我知道这解决了它,这就是我一直这样做的方式。

要这样做,您必须在脚本任务属性管理器中设置读/写变量,如屏幕截图所示,以便以这种方式访问​​它们。

另外一个问题可能是您正试图对 PostExecute 上的变量做一些事情,因为它在执行完成之前不会这样做,这可能会导致问题(不确定,但我从未在 PostExecute 中做过任何变量工作) .

// Read variable from SSIS package in C# script task
string VariableUseInScript = Dts.Variables["User::VariableAccessedFromSSISPackage"].Value.ToString();


// SET variable value in SSIS package to use in other parts of package
Dts.Variables("[SSISVariableValueToSet]").Value = "ValueToSet";

注意:在上面的屏幕截图中,我每个只有 1 个变量。您可以在每个中包含多个,或者它们都可以在 ReadOnly 中(如果您不更新它们)或在 ReadWrite 中(如果您正在更新它们)。

【讨论】:

  • 我在这里发帖之前先搜索了如何解决它,基本上,他们说后执行是更改读写变量的最佳位置,我正在通过消息框检查它们是否被更改并且它们正在做他们想要做的事情。但是,我需要使用或将更改后的变量值传递给 for 循环,以便 for 循环可以使用该值来确定它需要运行数据流的次数。我希望这是有道理的。
  • 当我按原样运行整个过程时,它会给我一条错误消息“锁定以进行读写访问的变量集合在 PostExecute 之外不可用。”我不知道还能做什么。所以请帮忙。
  • 我一直在 SSIS 中更新变量就好了,我不使用 PostExecute。尝试将它们放在主代码函数中(而不是执行后),看看是否可以修复它。
  • 我已经尝试退出 Post Execute 和我的常规代码。但我仍然遇到同样的错误。
猜你喜欢
  • 2018-01-25
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多