簡體   English   中英

如何使用從環境變量配置中設置的變量在SSIS包中設置變量?

[英]How do I set variables in an SSIS package using variables that are set from a Environment Variable Configuration?

對冗長的標題表示歉意,但這似乎是描述我所遇到的問題的最簡單方法。

我試圖用C#編寫一個程序,該程序將生成SSIS包。 我確實有可以用作模板的現有程序包,並且在現有程序包中,存在使用其他變量的變量,這些變量是使用環境變量填充的。 因此,例如,存在一個名為“ 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中可見。

您在這里可能會感到困惑。 您有添加變量的代碼,然后應用配置,然后嘗試添加另一個變量。 現在暫時忽略配置步驟,您應該在模板命名空間中的包中添加一個名為OutputFolder的變量。 問題是您正在嘗試將此變量的值分配為“ FolderRoot的值與\\ Output \\串聯”,這將在執行代碼時得到評估,從而導致您看到的是\\ 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\\";

我的博客文章SSIS EzAPI的變量和表達式中有更多編碼示例

使用billinkc提供的方法和鏈接,我可以使BIDS使用以下代碼成功生成變量值:

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

請將您的答案積分應用於Billinkc的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM