将用户参数传递给SSIS包

时间:2013-08-29 15:03:15

标签: c# ssis

这是我的问题。我有一个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];
                        }
                    }
                }
            }
        }

1 个答案:

答案 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。