我正在尝试使用DTS运行时类动态创建SSIS包。 我正在尝试使用“ Foreach From Variable Enumerator”创建一个foreach循环,其中我的变量包含具有必要集合的ArrayList。
我无法找到一种方法来设置变量(在枚举器配置下,如VS中所示),该变量将保存集合以进行循环。
我在forEachLoop.ForEachEnumerator中找不到任何选项。我也无法将forEachEnumeratorHost.InnerObject强制转换为所需的枚举数。我在MSDN上发现了一个类Microsoft.SqlServer.Dts.Runtime.Enumerators.FromVar.ForEachFromVarEnumerator。但是我无法在枚举器中找到FromVar类。我想念严重的东西吗?
还有其他人这样做吗?我发现很难相信通过Visual Studio UI可以轻松完成的某些事情不能以编程方式完成。
下面是我现在拥有的代码...
ForEachLoop forEachLoop = p.Executables.Add(“ STOCK:FOREACHLOOP”)为 ForEachLoop;
//创建一个VariableMappings和VariableMapping对象。
ForEachVariableMapping forEachVariableMapping = forEachLoop.VariableMappings.Add();//在变量及其值之间创建映射。
forEachVariableMapping.VariableName = @“ User :: CurrentTableName”; forEachVariableMapping.ValueIndex = 0;ForEachEnumeratorInfo forEachEnumeratorInfo = runtimeApp.ForEachEnumeratorInfos [“从变量枚举器中获取”]; ForEachEnumeratorHost forEachEnumeratorHost = forEachEnumeratorInfo.CreateNew();
答案 0 :(得分:2)
您快要出现了...我认为您忘记了设置forEachLoop对象的ForEachEnumerator属性。
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
答案 1 :(得分:1)
第一步是 将程序集引用添加到Microsoft.SqlServer.ForEachFromVarEnumerator.dll,然后可以访问Microsoft.SqlServer.Dts.Runtime.Enumerators.FromVar.ForEachFromVarEnumerator类。
然后剩下的答案就是@Sam上面提到的。
答案 2 :(得分:0)