2017-08-07 10 views
0

「User」という名前のSSISデータフロー(デザイナーモード)を持つパッケージを作成しました。「User」テーブルからADO.NET DestinationテーブルへのADO.NETソースを持っています。 UserDest '(列:id、name)。テーブルの列は同じです。次に、この同じ構造のデータフローを他の100個の残りのテーブルに再作成する必要があります(インポートは1つのテーブルにつき1回実行する必要があるため、追加的に優先順位制約を作成する必要があります)。 私の考えは、C#でパッケージを編集し、 'ユーザー'データフローの構造を複製し、列マッピングとADO.NETテーブルのソースと宛先を調整することです。C#でSSISデータフローをクローン化

私は性質のクローニングを開始するためにパッケージ変数の作成を開始しましたが、InnerObjectはnullを返します:

using System; 
using Microsoft.SqlServer.Dts.Runtime; 
using Microsoft.SqlServer.Dts.Pipeline.Wrapper; 
namespace ConsoleApplication1 
{ 
    public class Gerador 
    { 
     public string RunPackage2() 
     { 
      var pkgLocation = @"C:\Users\me\Documents\Visual Studio 2015\Projects\SSISExample1\SSISExample1\Package.dtsx"; 

      Application app = new Application(); 
      Package pkg = app.LoadPackage(pkgLocation, null); 
      var importUsersHost = pkg.Executables[0] as TaskHost; 

      var pipe = importUsersHost.InnerObject as MainPipe; // Here it returns null 

      Console.WriteLine(); 
      return "OK"; 
     } 
    } 
} 

は履歴書では、私は100、他のデータは、「ユーザーのデータの流れのように流れを生成する必要があり、各データフローを1つずつ実行する必要があるため、コネクタを1つずつ追加します。

Dataflow image

Package image

答えて

0

について、あなたは行くための最善のアプローチは、このタスクを達成するためにBIMLを使用することです。実行可能ファイルの最初の要素は、実際にデータフロータスクであるか、ない場合、私がチェックしますlink

+0

私はBIMLを知らなかったので、これを学び始めます。ありがとう! – marcelo

0

マルセロ、

- あなたはこのシリーズを開始することができます。その名前で要素にアクセスしようとするとどうなりますか?実行可能ファイル["my_data_flow_name"]と同様?

また、私が書いたツールを試してみることもできます。オブジェクトモデルを直接使用するよりも簡単に使用できます。 thisの例を見て、それを複製してください。

私が書いたツールを使用したくない場合は、そこにあるソースコードを見て、それを直接SSISオブジェクトモデルに適用することができます。

UPDATE:この例でループを直接表示する方法と、優先順位の制約を追加する方法についても編集しました。

+0

はい、要素インデックス0は、データフローの名前を持っているため、取得しようとしている実行ファイルです – marcelo

+0

Marcelo、提供できるメッセージはありますか?オブジェクトパイプ自体がヌルですか?あなたのパッケージとdllのバージョンは一致しますか? –

+0

dllのバージョンが一致するかどうかわかりません... SQL Server 2016(13.0)のパッケージ(デザインモード)を生成していました。サーバーはリモートで、開発用PCにはSQL Server 2014インスタンスのみ、2016リモートインスタンスには2016 SSMSのみがインストールされています。私は何をすべきか? – marcelo

関連する問題