4

SSISオブジェクトモデルを使用してプログラムでSSISパッケージを作成しています。

列挙子として作成したADOオブジェクト変数を使用してForEachループを作成したいと思います。変数を列挙子に割り当て、ループ内でその値を使用するにはどうすればよいですか?

4

1 に答える 1

4

仮定:

  • KeyValueの2つの列を含むADOオブジェクト変数User::ADOObjectがあります。

コード:

using Microsoft.SqlServer.Dts.Runtime.Enumerators;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Enumerators.ADO;

ForEachLoop f = new ForEachLoop();
ForEachADOEnumerator ado_enum = (ForEachADOEnumerator) f.ForEachEnumerator.InnerObject;
ado_enum.Type = ADOEnumerationType.EnumerateRowsInFirstTable;
ado_enum.DataObjectVariable = "User::ADOObject";

f.VariableMappings.Add();
f.VariableMappings[0].VariableName = "User::Key";
f.VariableMappings[0].ValueIndex = "Key";

f.VariableMappings.Add();
f.VariableMappings[1].VariableName = "User::Value";
f.VariableMappings[1].ValueIndex = "Value";

EzAPIを使用している場合は、 EzForEachLoopクラスがVariableMappingsをすぐに公開しないため、最初にEzAPIソースを変更する必要があります。このプロパティをEzExecutables.csのEzForEachLoopクラスに追加します。

public ForEachVariableMappings VariableMappings
{
    get { return (m_exec as ForEachLoop).VariableMappings; }

}

次に、コードでEzForEachLoopを次のように初期化します(これがカスタムパッケージクラス内で呼び出されると仮定すると、コンストラクターの「this」引数はそのパッケージを参照します)。

EzForEachLoop ezf = new EzForEachLoop(this); 
ezf.Initialize(ForEachEnumeratorType.ForEachADOEnumerator);

これで、 ezfの列挙子と変数のマッピングを上記のForEachLoopf と同じ方法で設定できます。

于 2013-03-25T14:49:02.060 に答える