如何在脚本组件中访问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()方法中。