2

現在、いくつかの既存の SSIS パッケージで使用されている既存の MQ カスタム接続マネージャーがあります。

新しいプロパティを追加してコードを少し変更したいのですが、そうすると、他のすべてを壊しているように見えます (すべてやり直す必要があります)。

それを使用する既存のパッケージを中断せずにこれを回避する方法はありますか?

ありがとう

4

1 に答える 1

2

プロパティを追加して SSIS パッケージを編集し、それを実行する必要があると仮定します。その後、SSIS パッケージは必要ありません。次のコード メソッドをアプリケーションに追加し、このメソッドを呼び出す必要があります。したがって、すべての変更は、別のパッケージを変更することなく、新しいパッケージにのみ適用されます。

  1. SSIS パッケージを入手する
  2. GUID を追加して、そのコピーを作成します。したがって、パッケージ名は PackageName_GUID.dtsx のようになります
  3. プロパティを追加します。
  4. SSIS パッケージを実行する
  5. OnSuccess 完全実行。SSIS パッケージを削除します。

コード

    public static DtsErrors RunSSISPackage(string packagePath, string MQProperty)
    {
             * Append the auto generated GUID with the package name for running the SSIS package
             */
            string uniqueId = Guid.NewGuid().ToString();

            string uniquePackage = Path.GetDirectoryName(packagePath) + @"\" + Path.GetFileNameWithoutExtension(packagePath) + "_" + uniqueId + ".dtsx";

            File.Copy(packagePath, uniquePackage);

            Package pkg;
            Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();

            pkg = app.LoadPackage(uniquePackage, null);

            //MessageBox.Show(srcFileName);
            //MessageBox.Show(TPODBConnection);

            pkg.Connections["MQConnection"].<<YourPropertyName>> = MQProperty;

            //Uncomment this to overwrite the existing file
            //Do nothing until you are using a version control system
            //app.SaveToXml(packagePath, package, null);

            DTSExecResult result = pkg.Execute();

            if (result == DTSExecResult.Failure)
            {
                return pkg.Errors;
            }

            File.Delete(uniquePackage);

        return null;
    }

お役に立てれば!

于 2013-05-27T11:31:35.963 に答える