如何访问我的C#代码中的变量,我在数据流中使用 - >脚本组件 - >我的C#脚本与我的SSIS包?
我试图与这也没有工作
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
如何访问我的C#代码中的变量,我在数据流中使用 - >脚本组件 - >我的C#脚本与我的SSIS包?
我试图与这也没有工作
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包变量为一个字符串。
在代码你现在将有机会获得阅读变量
串的myString = Variables.MyVariableName.ToString();
我有同样的问题,因为除了OP我想起申报ReadOnlyVariables。
一些玩耍后,我发现这是我的变量,这是问题的名称。 “FILE_PATH”在SSIS不知何故转换为“文件路径”。 C#不与变量名下划线发挥很好。
因此,要访问变量,I型
string fp = Variables.FilePath;
在脚本组件的PreExecute()方法。
强类型变种似乎没有用,我必须这样做,以获得对它们的访问以下内容:
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的call()方法。