如何访问我在数据流 -> 脚本组件 -> 我的 C# 脚本和我的 SSIS 包中使用的 C# 代码中的变量?
我试过 which 也不起作用
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
访问(数据流任务的)脚本组件中的包变量与访问脚本任务中的包变量不同。对于脚本组件,您首先需要打开脚本转换编辑器(右键单击组件并选择“编辑...”)。在“脚本”选项卡的“自定义属性”部分,您可以输入(或选择)您希望在只读或读写基础上提供给脚本的属性: 然后,在脚本本身中,变量将可用作变量对象的强类型属性:
// 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 中列出要在脚本任务中使用的变量,然后编辑脚本
在脚本代码中使用您的 ReadOnlyVariables
String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
这行代码会将 ssis 包变量视为字符串。
除了我记得声明 ReadOnlyVariables 之外,我遇到了与 OP 相同的问题。
在玩了一些之后,我发现问题出在我的变量名上。SSIS 中的“File_Path”不知何故被转换为“FilePath”。C# 不能很好地处理变量名中的下划线。
所以要访问变量,我输入
string fp = Variables.FilePath;
在脚本组件的 PreExecute() 方法中。
在代码中,您现在可以将变量读取为
字符串 myString = Variables.MyVariableName.ToString();
强类型的 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() 方法的调用。