1

かなり長いタイトルで申し訳ありませんが、それは私が遭遇した問題を説明する最も簡単な方法のようです.

SSIS パッケージを生成するプログラムを C# で作成しようとしています。テンプレートとして使用できる既存のパッケージがあり、既存のパッケージには、環境変数を使用して設定された他の変数を使用する変数があります。たとえば、「RootFolder」という名前の変数があり、環境変数を使用して設定され、パッケージの作業フォルダーを確立します。パッケージには「OutputFolder」という名前の別の変数があり、これは RootFolder 変数の値を取り、文字列「\Output」を追加します。元の開発者は BIDS Helper を使用して、OutputFolder に次の式を設定しました: @[Template::RootFolder] + "\Output\"

変数が作成される前に環境変数が設定されていないように見えるため、C#でこれを構築する際に少し問題が発生したため、子変数には追加されたデータしかないように見えます。上記の例を使用すると、「OutputFolder」変数は「\OutPut\」に等しくなります。

環境変数を指すように構成を設定し、RootFolder から変数をスタックするために使用しているコードのスニペットを次に示します。

pkg.Variables.Add("FolderRoot", false, "Template", "");

Configuration configRootFolder = pkg.Configurations.Add();
configRootFolder.Name = @"RootFolder";
configRootFolder.ConfigurationType = Microsoft.SqlServer.Dts.Runtime.DTSConfigurationType.EnvVariable;
configRootFolder.ConfigurationString = @"Ssis_RootFolder";
configRootFolder.PackagePath = "\\Package.Variables[Template::FolderRoot].Properties[Value]";

pkg.Variables.Add("OutputFolder", false, "Template", pkg.Variables["Template::FolderRoot"].Value + "\\Output\\");

どんな援助でも大歓迎です。前もって感謝します!リッチ

編集:申し訳ありませんが、重要な詳細を見逃していることに気付きました:

  • プログラムを使用してパッケージが作成された後、RootFolder 変数は環境変数を呼び出して適切に設定され、Visual Studio で表示されます。
4

2 に答える 2

1

ここで混乱するかもしれません。変数を追加するコードがあり、構成を適用してから、別の変数を追加しようとしています。ここでは構成手順を無視して、テンプレート名前空間の OutputFolder という名前の変数をパッケージに追加する必要があります。問題は、この変数の値を「\Output\ と連結された FolderRoot の値」に割り当てようとしていることです。これは、コードが実行されたときに評価され、\Output\ として表示されます。

代わりに、変数 OutputFolder の値を、割り当てている式にする必要があります。プロパティを見るまでは少し混乱します。

ここに画像の説明を入力

BIDS を使用してこれを実現するには、その式を Expression プロパティに割り当て、EvaluateAsExpression を True に切り替える必要があります。コードでは、それは

Variable v = null;
v = pkg.Variables.Add("OutputFolder", false, "Template", String.Empty);
v.EvaluateAsExpression = true;
v.Expression = pkg.Variables["Template::FolderRoot"].Value + "\\Output\\";

私のブログ投稿Variables and Expressions with SSIS EzAPIのその他のコーディング例

于 2012-08-06T20:41:37.977 に答える
0

billinkc が提供するメソッドとリンクを使用して、次のコードを使用して BIDS に変数値を正常に生成させることができました。

Variable v = null;
v = pkg.Variables.Add("OutputFolder", false, "Template", String.Empty);
v.EvaluateAsExpression = true;
v.Expression = "@[Template::FolderRoot] + \"\\\\Output\\\\\"";

あなたの回答クレジットをbillinkcの回答に適用してください。

于 2012-08-07T03:05:04.850 に答える