2016-12-24 56 views
0

我想通过编程将一个Foreach ADO枚举器任务添加到SSIS包中,并且无法解决如何将源设置为我的ADO对象 和映射ADO对象字段到变量映射。如何以编程方式创建一个SSIS Foreach ADO枚举器#

我可以使用C#构建我的包。

感谢

我有这个迄今为止..它创建的任务ok了,我加的变量。所以,我想我只是需要能够设置ADO对象源变量,但不能工作了......

Executables executables = pkg.Executables; 
      ForEachLoop forEachLoop = executables.Add("STOCK:ForEachLoop") as ForEachLoop; 

      forEachLoop.Name = group.ToString(); 
      PrecedenceConstraint constraint = pkg.PrecedenceConstraints.Add(mainPipe, forEachLoop); 

      // Create a VariableMappings and VariableMapping objects. 
      ForEachVariableMappings forEachVariableMappings = forEachLoop.VariableMappings; 
      ForEachVariableMapping forEachVariableMapping = forEachVariableMappings.Add(); 

      forEachVariableMapping.VariableName = @"User::ClientName"; 
      forEachVariableMapping.ValueIndex = 0; 


      ForEachVariableMapping forEachVariableMapping2 = forEachVariableMappings.Add(); 

      forEachVariableMapping2.VariableName = @"User::LinkedServer"; 
      forEachVariableMapping2.ValueIndex = 1; 




      ForEachEnumeratorInfo forEachEnumeratorInfo = app.ForEachEnumeratorInfos["Foreach ADO Enumerator"]; 
      ForEachEnumeratorHost forEachEnumeratorHost = forEachEnumeratorInfo.CreateNew(); 
      forEachEnumeratorHost.CollectionEnumerator = true; 
+0

目前为止你有什么代码?你为什么要用C#构建一个包? –

+0

我在c#中构建软件包的原因是因为我需要根据控制台应用程序的参数创建很多类似的软件包 – Tempest

+0

有一些名为BIML的软件可以帮助解决这个问题。 –

回答

0

,我认为你是问你怎么可以在设定的“ADO对象源变量” Foreach ADO Enumerator配置。

你很近。 foreach循环容器的行为有点像Task,因为它承载了一个InnerObject。此InnerObject根据需要设置为适当的枚举器。

在代码中,你已经创建了ForEachEnumeratorHost对象。如果您查看文档,可以看到它具有InnerObject属性。您需要访问InnerObject并将其转换为您想要的确切类型的Enumerator。在这种情况下,您应该将其转换为ForEachADOEnumerator类型的对象。一旦你投了它,这个转换对象可以向你公开诸如Type,DataObjectVariable等属性,这些属性可以用来配置Ado Enumerator。

此外,访问ForEachADOEnumerator对象,您需要添加一个引用到Microsoft.SqlServer.ForEachADOEnumerator.dll

因此,只要做到这一点:

// cast the inner object as ForEachADOEnumerator 
     ForEachADOEnumerator adoEnum = forEachEnumeratorHost.InnerObject as ForEachADOEnumerator; 

     // then access the properties and set them 
     // set the variable 
     adoEnum.DataObjectVariable = "User::MyVar"; 

     // set the enumeration mode 
     adoEnum.Type = ADOEnumerationType.EnumerateRowsInFirstTable; 

     // finally... 
     forEachLoop.ForEachEnumerator = forEachEnumeratorHost; 

作为一般原则,我会鼓励您查看所有这些相应类的msdn文档;对ssis软件包进行手动更改并观察xml中的更改,并将其与msdn文档中的不同类,属性和方法联系起来。很快,您将会得到一个关于如何以编程方式开发包的问题。