我想从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();
参数包:
错误:
无法找到变量。当在程序包执行期间尝试从容器上的Variables集合中检索变量时,会发生这种情况,并且变量不存在。变量名称可能已更改或未创建变量。
我读了另一个关联问题,但我没有找到一些正确答案来解决我的问题。非常感谢帮助。此致
更新:,因为Hadi评论我尝试使用
var setValueParameters = new Collection<PackageInfo.ExecutionValueParameterSet>();
答案 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);
如果使用参数,看起来它们无法以编程方式修改。尝试使用变量代替它们