如何在脚本组件中访问ssis包变量

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

我试过用哪个也行不通

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

在脚本组件 (数据流任务)中访问包变量与在脚本任务中访问包变量不同。 对于脚本组件,首先需要打开脚本转换编辑器 (右键单击该组件并选择“编辑…”)。 在“脚本”选项卡的“自定义属性”部分中,您可以以只读或读写方式输入(或选择)要使脚本可用的属性: 脚本转换编辑器属性页面的屏幕截图 然后,在脚本本身中,变量将作为Variables对象的强类型属性提供:

 // 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,并且永远不会设置为有效值。 因此, 任何取消引用它的尝试都将失败。

  • 在变量脚本的前端属性页面上,修改ReadOnlyVariables(或ReadWriteVariables)属性并选择您感兴趣的变量。这将启用脚本任务中的选定变量
  • 在代码中,您现在可以将变量读取为

    string myString = Variables.MyVariableName.ToString();

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

在脚本代码中使用ReadOnlyVariables

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

这行代码将ssis包变量视为字符串。

强类型var似乎不可用,我必须执行以下操作才能访问它们:

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

这应该工作:

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

您的初始代码缺少GetVariables()方法的调用。

除了我记得声明ReadOnlyVariables之外,我遇到了与OP相同的问题。

经过一些游戏,我发现这是我的变量的名称是问题。 SSIS中的“File_Path”以某种方式转换为“FilePath”。 C#与变量名中的下划线不能很好地匹配。

所以要访问变量,我输入

 string fp = Variables.FilePath; 

在Script Component的PreExecute()方法中。