SSIS无法找到变量

时间:2017-05-25 21:52:37

标签: sql-server ssis etl ssis-2012 dts

我想从visual studio解决方案执行包

代码:

private Microsoft.SqlServer.Dts.Runtime.Package pkgPaquete;
private Application appAplicacion;

public DTSExecResult EjecucionPaquete(string str_Paquete, List < CatVariablesEtl > Vars = null) {

  DTSExecResult respuesta;
  try {
    appAplicacion = new Application();

    appAplicacion.PackagePassword = "pass";

    pkgPaquete = appAplicacion.LoadPackage(str_Paquete, null);
    foreach(CatVariablesEtl item in Vars) {
      pkgPaquete.Variables[item.str_NombreVariable.ToString()].Value = item.str_ValorVariable.ToString();
    }

    respuesta = pkgPaquete.Execute();

    return respuesta;
  } catch (Exception ex) {

    throw new NotImplementedException();
  }

}
}
}

它停在foreach语句中,只是在这行中引发了捕获:

pkgPaquete.Variables[item.str_NombreVariable.ToString()].Value = item.str_ValorVariable.ToString();

enter image description here

str_NombredeVariable值: enter image description here

item.str_ValorVariable值: enter image description here

参数包:

enter image description here

错误:

  

无法找到变量。当在程序包执行期间尝试从容器上的Variables集合中检索变量时,会发生这种情况,并且变量不存在。变量名称可能已更改或未创建变量。

我读了另一个关联问题,但我没有找到一些正确答案来解决我的问题。非常感谢帮助。此致

更新:,因为Hadi评论我尝试使用

var setValueParameters = new Collection<PackageInfo.ExecutionValueParameterSet>();

但是我得到vs红色标记,我需要导入一些引用?enter image description here

作为Hadi的第二个答案,我无法参考pkgPaquete.Variables:enter image description here

1 个答案:

答案 0 :(得分:1)

第一次尝试

尝试从变量名

中删除User::
foreach(CatVariablesEtl item in Vars) {
  pkgPaquete.Variables[item.str_NombreVariable.ToString().Replace("User::","")].Value = item.str_ValorVariable.ToString();
}

协调变量的第二种方法

还尝试使用此方法为变量赋值:

Microsoft.SqlServer.Dts.RunTime.Variables myVars = pkgPaquete.Variables;

foreach(CatVariablesEtl item in Vars) {
  myVars[item.str_NombreVariable.ToString().Replace("User::","")].Value = item.str_ValorVariable.ToString();
}

Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = pkgPaquete.Execute(null, myVars, null, null, null);

如果使用参数,看起来它们无法以编程方式修改。尝试使用变量代替它们