如何更新现有的自定义连接管理器而不破坏现有的包

时间:2013-05-27 05:18:47

标签: c# ssis

我们有一个现有的MQ自定义连接管理器,当前正由几个现有的SSIS包使用。

我想添加一个新属性并稍微修改一下代码,但如果我这样做,看起来我正在打破其他所有东西(必须重做所有这些。)

有没有办法解决这个问题,而不会破坏使用它的现有软件包?

由于

1 个答案:

答案 0 :(得分:2)

假设您需要通过添加属性并运行它来编辑SSIS包。之后你不需要SSIS包。以下代码方法应添加到您的应用程序并调用此方法。因此,所有更改将仅应用于新包而不修改另一个包。

  1. 获取SSIS包
  2. 通过附加GUID创建它的副本。所以您的包名称类似于PackageName_GUID.dtsx
  3. 添加您的财产。
  4. 运行您的SSIS包
  5. OnSuccess完全执行。删除SSIS包。
  6. <强>代码

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

    希望这有帮助!