2017-09-25 38 views
0

すべてのパッケージに対してDBへの動的接続をしようとしています。私はこれを達成するためにスクリプトコンポーネントでユーザー定義変数をロードすることを試みています。私はまた、これを行うには、環境変数を使用することができます知っているSSIS動的接続文字列

は、問題は私のすべてのパッケージがスケジュールされていないということで、そのうちのいくつかは、私は、Webサービスまたはプロシージャを実行するので、私は、スケジュールを使用することはできません@reference_idを使用することは、維持するのが少し複雑です。

どのように変数をループすることはできません。 Iループ私は渡されたすべての変数にはどうすればよい

  • :だから私はここに二つの質問を持って
    ..私は

    foreachの(変数の変数VAR)

    を試みたが、それは方法ではありませんか?

  • どのようにして変数名を取得できますか? (Variables.VarNameの名前属性は表示されません)

E.G. OLE DBソースは2行を返します。

conName | conString 
con1 | someConnection 
con2 | someConnection 

そして私のプロジェクトには、2つのユーザー定義変数があります。 - > con1とcon2です。 したがって、var.name = row.conNameの場合、foreach(変数)を使って、私のvaraiblesを反復処理し、row.conString値でロードします。

+0

変数.YourVarialbName – plaidDK

+0

@plaidDK動的である必要があります。変数名が変わる可能性があるので、それらをすべてループする必要があります。 – sagi

+0

しかし、変数 – plaidDK

答えて

1

最後に私はこれをやり遂げました。同じことをしたいと思うだろう人のために、ここで私がやったことです:

public class ScriptMain : UserComponent 
{ 

    Dictionary<string, string> AllCons = new Dictionary<string, string>(); 

    public override void PostExecute() 
    { 
     base.PostExecute(); 
     string connectionString; 

     foreach (IDTSVariable100 obj in ReadWriteVariables) 
     { 
      if (AllCons.TryGetValue(obj.QualifiedName, out connectionString)) 
      { 
       obj.Value = connectionString; 
      } 
     } 
    } 

    public override void Input0_ProcessInputRow(Input0Buffer Row) 
    { 
     AllCons.Add("User::" + Row.ConName, Row.ConString); 
    } 
} 

私はInput0_ProcessInputRowセクションの接続名と接続文字列を格納するDictionaryオブジェクトを使用していました。次に、PostExecuteでは、IDTSVariable100オブジェクトを使用してすべてのユーザー定義変数を繰り返しました。私はその後、接続名が変数と等しい場合は、接続文字列をそれに入れます。

誰かを助けることを願っています。

+0

うまくいけばうれしいです。あなたは私が投稿したリンクと同じことをすることができます。オブジェクトをデータテーブルに設定する場所:) – plaidDK

関連する問題