2

这是我的问题。我有一个 SSIS 包,它在名为 SegmentID 的输入上采用 1 个参数。但我不能从 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];
                        }
                    }
                }
            }
        }
4

1 回答 1

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);

为什么它让我如此困惑是我认为这个东西只是用于系统参数,例如日志记录级别或其他东西,并且没有提到用户参数的代码是20,并且这种构造可以用于分配它们。希望它可以帮助某人避免我两天的痛。

于 2013-08-29T15:36:50.610 回答