Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用“创建foreach循环”;Foreach From Variable Enumerator“;以编程方式在SSIS中_Ssis_Biml - Fatal编程技术网

如何使用“创建foreach循环”;Foreach From Variable Enumerator“;以编程方式在SSIS中

如何使用“创建foreach循环”;Foreach From Variable Enumerator“;以编程方式在SSIS中,ssis,biml,Ssis,Biml,我正在尝试使用DTS运行时类动态创建SSIS包。 我试图使用“foreach From Variable Enumerator”创建一个foreach循环,其中我的变量包含一个带有必要集合的ArrayList 我无法找到一种方法来设置变量(在枚举器配置下,如VS中所示),该变量将保存集合以进行循环 我在forEachLoop.ForEachNumerator中找不到任何选项。我也无法将ForEachNumeratorHost.InnerObject强制转换为我想要的枚举数。我在MSDN上发现了一

我正在尝试使用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对象。
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版本中找到