如何访问脚本组件内部SSIS包变量(How to access ssis package varia

2019-06-21 05:48发布

如何访问我的C#代码中的变量,我在数据流中使用 - >脚本组件 - >我的C#脚本与我的SSIS包?

我试图与这也没有工作

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();

Answer 1:

在脚本组件 (一个数据流任务的)访问包变量是不一样的脚本任务访问包的变量。 对于一个脚本组件,您首先需要打开脚本转换编辑器 (在组件上单击鼠标右键,选择“编辑...”)。 在脚本选项卡中的自定​​义属性部分,您可以输入(或选择),你要提供给脚本的性能,无论是在只读或读写的基础: 然后,脚本本身,变量将作为变量的强类型属性对象:

// Modify as necessary
public override void PreExecute()
{
    base.PreExecute();
    string thePath = Variables.FilePath;
    // Do something ...
}

public override void PostExecute()
{
    base.PostExecute();
    string theNewValue = "";
    // Do something to figure out the new value...
    Variables.FilePath = theNewValue;
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string thePath = Variables.FilePath;
    // Do whatever needs doing here ...
}

一个重要的警告:如果你需要一个包变量,你只能在PostExecute()方法做到这一点。

关于代码片段:

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();

varCollection被初始化为null,从来没有设置为有效的值。 因此, 任何试图取消对它的引用将会失败。



Answer 2:

首先列出你想在脚本任务的ReadOnlyVariables在脚本任务编辑器中使用它们的变量和编辑脚本

要在脚本代码使用ReadOnlyVariables

String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();

这行代码将把SSIS包变量为一个字符串。



Answer 3:

  • 在变量脚本的前面属性页,修改ReadOnlyVariables(或ReadWriteVariables)属性,然后选择您感兴趣的变量,这将使脚本任务中所选择的变量
  • 在代码你现在将有机会获得阅读变量

    串的myString = Variables.MyVariableName.ToString();



Answer 4:

我有同样的问题,因为除了OP我想起申报ReadOnlyVariables。

一些玩耍后,我发现这是我的变量,这是问题的名称。 “FILE_PATH”在SSIS不知何故转换为“文件路径”。 C#不与变量名下划线发挥很好。

因此,要访问变量,I型

string fp = Variables.FilePath;

在脚本组件的PreExecute()方法。



Answer 5:

强类型变种似乎没有用,我必须这样做,以获得对它们的访问以下内容:

String MyVar = Dts.Variables["MyVarName"].Value.ToString();



Answer 6:

这应该工作:

IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars("System::TaskName").Value.ToString();
vars.Unlock();

您最初的代码缺少GetVariables的call()方法。



文章来源: How to access ssis package variables inside script component