2

これが私の問題です。SegmentID という入力で 1 つのパラメーターを受け取る SSIS パッケージがあります。しかし、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 であり、この構造を使用してそれらを割り当てることができると NOWHERE が言及されていました。誰かが私が2日間持っていたバットハートを避けるのに役立つことを願っています.

于 2013-08-29T15:36:50.610 に答える