在Integration Services中设置程序包用户变量值并运行程序包C#LoadFromSqlServer

时间:2014-11-04 21:09:13

标签: c# ssis package ssms

我有导入Integration Services的软件包。我已将它们全部设置好并且已将它们映射到运行状态。我的问题是我正在尝试以编程方式将值传递给包中​​的用户变量。

我有一个Start Date和一个End Date,我必须填充,但我无法找到任何关于我在做什么。有人可以帮忙吗?

我是使用LoadFromSqlServer的新手,并不确定是否有更多信息需要您提供帮助,但如果您要求我将非常乐意编辑我的问题并添加所需内容。

非常感谢任何帮助。谢谢!

--- --- EDIT

这是我使用这段代码得到的错误:

Application app = new Application();            
Package package = new Package();
Variables variables = package.Variables;

package = app.LoadFromSqlServer("\\File\\Path\\" + paramName, ".", "UserName"
, "Password", null);

variables["User::START_DATETIME"].Value = startDate;
variables["User::END_DATETIME"].Value = endDate;

DTSExecResult result = package.Execute();

这是错误:

Additional information: The variable cannot be found. This occurs when an attempt 
is made to retrieve a variable from the Variables collection on a container during 
execution of the package, and the variable is not there. The variable name may have 
changed or the variable is not being created.

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式将varibles传递给SSIS包:

Package package = null;

//Load the SSIS Package which will be executed

package.Variables["User::StartDate"].Value = '2014-01-01';
package.Variables["User::EndDate"].Value = '2014-01-10';

修改 1.检查是否没有拼写错误:

if (package .Variables.Contains["StartDate"])
{
...
}
  1. 确保SSIS服务正在运行
  2. 您也可以尝试使用Dispenser类:

    package.VariableDispenser.LockOneForWrite(“StartDate”,变量) package.Variables [“User :: StartDate”]。Value ='2014-01-01'; variables.Unlock()

答案 1 :(得分:0)

我实际上能够找到问题的问题。这是相当愚蠢但仍然是一个解决方案。

在我的代码中我正在使用

Variables variables = package.Variables;

在我实际将一个包附加到我的package变量之前。

切换我的代码以在将包附加到我的变量之后调用变量。新代码如下所示:

Application app = new Application();            
Package package = new Package();

package = app.LoadFromSqlServer("\\File\\Path\\" + paramName, ".", "UserName"
, "Password", null);

Variables variables = package.Variables;
variables["START_DATETIME"].Value = startDate;
variables["END_DATETIME"].Value = endDate;

DTSExecResult result = package.Execute();