这是我的问题.我有一个SSIS包,在输入上有一个名为SegmentID的参数.但我不能从c#代码传递它.我在寻找FOR2天,到目前为止,这是我想到了,这应该工作的解决方案,但不 - 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];
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,伙计们,但我想通了.你必须做这样的事情:
var setValueParameters = new Collection<PackageInfo.ExecutionValueParameterSet>();
setValueParameters.Add(new PackageInfo.ExecutionValueParameterSet
{
ObjectType = 20,
ParameterName = "SegmentID",
ParameterValue = 1
});
Run Code Online (Sandbox Code Playgroud)
然后打电话:
long executionIdentifier = package.Execute(false, null, setValueParameters);
Run Code Online (Sandbox Code Playgroud)
为什么它让我如此困惑的是,我认为这个东西只是用于系统参数,比如日志级别或者其他东西,并且NOWHERE被提到用户参数的代码是20,并且这种结构可以用于分配它们.希望它能帮助有人避免我用了2天的butthurt.