如何使用“创建foreach循环”;Foreach From Variable Enumerator“;以编程方式在SSIS中
我正在尝试使用DTS运行时类动态创建SSIS包。 我试图使用“foreach From Variable Enumerator”创建一个foreach循环,其中我的变量包含一个带有必要集合的ArrayList 我无法找到一种方法来设置变量(在枚举器配置下,如VS中所示),该变量将保存集合以进行循环 我在forEachLoop.ForEachNumerator中找不到任何选项。我也无法将ForEachNumeratorHost.InnerObject强制转换为我想要的枚举数。我在MSDN上发现了一个类Microsoft.SqlServer.Dts.Runtime.Enumerators.FromVar.ForEachFromVarEnumerator。但我无法在枚举器中找到FromVar类。我是不是错过了什么 还有其他人这样做吗?我发现很难相信可以通过VisualStudioUI轻松完成的事情不能通过编程完成 下面是我现在的代码 ForEachLoop ForEachLoop=p.Executables.Add(“STOCK:ForEachLoop”)为 前肢环 //创建VariableMappings和VariableMapping对象。如何使用“创建foreach循环”;Foreach From Variable Enumerator“;以编程方式在SSIS中,ssis,biml,Ssis,Biml,我正在尝试使用DTS运行时类动态创建SSIS包。 我试图使用“foreach From Variable Enumerator”创建一个foreach循环,其中我的变量包含一个带有必要集合的ArrayList 我无法找到一种方法来设置变量(在枚举器配置下,如VS中所示),该变量将保存集合以进行循环 我在forEachLoop.ForEachNumerator中找不到任何选项。我也无法将ForEachNumeratorHost.InnerObject强制转换为我想要的枚举数。我在MSDN上发现了一
ForEachVariableMapping ForEachVariableMapping= VariableMappings.Add() //创建变量与其值之间的映射。
forEachVariableMapping.VariableName=@“User::CurrentTableName”; forEachVariableMapping.ValueIndex=0 ForEachEnumeratorInfo ForEachEnumeratorInfo= runtimeApp.ForEachNumeratorInfo[“Foreach来自变量枚举器”]; ForEachEnumeratorHost ForEachEnumeratorHost= forEachEnumeratorInfo.CreateNew() 您可以这样做: 脚本任务 确保MyList变量是可写的
ArrayList NewList = new ArrayList();
NewList.Add("Ost");
NewList.Add("Hest");
Dts.Variables["User::MyList"].Value = NewList;
Dts.TaskResult = (int)ScriptResults.Success;
您就快到了……我想您忘记设置forEachLoop对象的ForEachNumerator属性了
ForEachLoop forEachLoop = p.Executables.Add("STOCK:FOREACHLOOP") as ForEachLoop;
ForEachEnumeratorInfo forEachEnumeratorInfo = runtimeApp.ForEachEnumeratorInfos["Foreach From Variable Enumerator"];
ForEachEnumeratorHost forEachEnumeratorHost = forEachEnumeratorInfo.CreateNew();
//forEachEnumeratorHost.CollectionEnumerator = false; // true or false; set accordingly.
// cast the inner object to ForEachFromVarEnumerator
ForEachFromVarEnumerator = forEachEnumeratorHost.InnerObject as ForEachFromVarEnumerator;
// Now that you have the ForEachFromVarEnumerator, set its properties.
// For variable name, do not forget the variable's name space and the variable name (separated by ::)
ForEachFromVarEnumerator.VariableName = "var_namespace" + "::" + "var_name";
// finally.....
forEachLoop.ForEachEnumerator = forEachEnumeratorHost; // DO NOT FORGET THIS. Here you are setting what the actual enumerator would be
第一步是
将程序集引用添加到Microsoft.SqlServer.ForEachFromVarEnumerator.dll,然后可以访问Microsoft.SqlServer.Dts.Runtime.Enumerators.FromVar.ForEachFromVarEnumerator类
剩下的答案正是@Sam上面提到的。您使用的是SSI还是biml?您使用的是脚本任务吗?我在ssis包脚本taskDts.Variable[“User::YourNameList”].Value=您的ArrayList中执行上述所有操作,然后将其作为变量EnumatorTanks Sam映射到ssis中的foreach循环容器下,我知道我必须这样做,但在Microsoft.SqlServer.Dts.Runtime.Enumerators下找不到ForEachFromVarEnumerator类。后来我意识到我必须添加对Microsoft.SqlServer.ForEachFromVarEnumerator.dll的程序集引用,然后才能访问Microsoft.SqlServer.Dts.Runtime.Enumerators.FromVar.ForEachFromVarEnumerator类。酷。。。为了完成答案;所需的dll可在C:\Windows\Microsoft.NET\assembly\GAC\MSIL\Microsoft.SqlServer.ForEachFromVarEnumerator\fill-in sql版本中找到