这是我的问题。我有一个SSIS包,在输入上有一个名为SegmentID的参数。但我不能从c#代码传递它。到目前为止我正在寻找2天,这是我提出的解决方案,它应该可以工作,但是没有 - SSIS包在获取参数的阶段失败了。我到底做错了什么?
using (SqlConnection con = GetConnection())
{
var integrationServices = new IntegrationServices(con);
if (integrationServices.Catalogs.Contains("SSISDB"))
{
var catalog = integrationServices.Catalogs["SSISDB"];
if (catalog.Folders.Contains("PSO"))
{
var folder = catalog.Folders["PSO"];
if (folder.Projects.Contains("PSO_SSIS"))
{
var project = folder.Projects["PSO_SSIS"];
project.Parameters["SegmentID"].Set(ParameterInfo.ParameterValueType.Literal, segmentID);
if (project.Packages.Contains("Main.dtsx"))
{
var package = project.Packages["Main.dtsx"];
long executionIdentifier = package.Execute(false, null);
return catalog.Executions[executionIdentifier];
}
}
}
}
}
答案 0 :(得分:7)
谢谢,伙计们,但我想通了。你必须做这样的事情:
var setValueParameters = new Collection<PackageInfo.ExecutionValueParameterSet>();
setValueParameters.Add(new PackageInfo.ExecutionValueParameterSet
{
ObjectType = 20,
ParameterName = "SegmentID",
ParameterValue = 1
});
然后致电:
long executionIdentifier = package.Execute(false, null, setValueParameters);
为什么让我这么困惑的是我认为这个东西只是用于系统参数,比如日志级别或者其他东西,NOWHERE被提到用户参数的代码是20,这个结构可以用来分配它们。希望它能帮助有人避免我用了2天的butthurt。