如何使用从环境变量配置中设置的变量在SSIS包中设置变量?

时间:2012-08-06 17:21:10

标签: c# ssis

为相当冗长的标题道歉,但这似乎是描述我遇到的问题的最简洁方式。

我正在尝试用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中可见。

2 个答案:

答案 0 :(得分:1)

你可能会在这里混淆一​​些事情。您有代码来添加变量,然后您正在应用配置,然后您尝试添加另一个变量。暂时忽略配置步骤,在模板名称空间中向名为OutputFolder的包添加变量。问题是您正在尝试将此变量的值分配为“FolderRoot的值与\ Output \”连接。这将在执行代码时进行评估,从而导致您看到的内容为\ Output \

相反,您要做的是将变量OutputFolder的值设置为您要分配的 Expression 。直到你看房产才会有点混乱。

enter image description here

要使用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

上有更多编码示例

答案 1 :(得分:0)

使用billinkc提供的方法和链接,我能够让BIDS使用以下代码成功生成变量值:

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

请将您的回答信用于billinkc的回答。