抓取输出变量SSIS包

时间:2015-07-03 07:17:34

标签: .net sql-server ssis

我有一个执行SSIS包的.NET应用程序。

最后我有一个脚本变量,它将值X赋给变量,然后包结束。

我需要一种从.NET包中获取该变量值的方法。可以吗?

工作流程为:

.NET app > typical .NET stuff > execute SSIS package > SSIS package has a variable named "chicken" with value = 3 > .NET package continues and to do so it needs "chicken" value.

1 个答案:

答案 0 :(得分:0)

假设您已经为SSIS包使用了sql server部署方法。通过以下示例步骤从变量中读取值或设置变量值

  1. 将以下程序集导入应用程序

    System.Data.SqlTypes;
    Microsoft.SqlServer.Dts.Runtime;
    Microsoft.SqlServer.Management.Smo;
    Microsoft.SqlServer.Management.Smo.Agent;
    Microsoft.SqlServer.Management.Common;
    System.Data.SqlClient;
    
  2. 添加以下代码段,这些代码段将返回部署在SQL Server上的SSIS包的集合

    Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
    
    PackageInfos pInfos = app.GetPackageInfos("\\", ConfigurationSettings.AppSettings["ServerIp"].ToString(), "", "");
    
  3. 注意:ServerIp受SQL Server IP地址

    的约束
    1. 现在我们将包信息(此处为SSIS包的名称)添加到下拉列表中,以便用户可以选择SSIS包并执行相同的操作。

      foreach (PackageInfo pInfo in pInfos)
          {
      
      if (pInfo.Name != "Maintenance Plans")
                  ComboBoxJob.Items.Add(pInfo.Name);
      
          }
      
    2. 以下代码段显示了如何执行包。当用户点击屏幕截图中显示的“执行”按钮时,将调用此代码段。

      Microsoft.SqlServer.Dts.Runtime.Application app;
      app = new Microsoft.SqlServer.Dts.Runtime.Application();
      
      DTSExecResult pkgResults_Sql;
      
      Package pkgIn = new Package();
      
      pkgIn = app.LoadFromSqlServer("\\"+ComboBoxJob.SelectedItem.ToString().Trim(),ConfigurationSettings.AppSettings["ServerIp"].ToString(), "", "", null);
      
      
      // This statement set “Test” variable to 12
      
      
      pkg.Variables["Test"].Value = 12; 
      
      
      
      //This statement gets activity present at index 2 in SSIS package and 
      //allows you to modify properties. For example I am disabling activity 
      //present at index 2. So that when this package will execute activity at 
      //index 2 won’t be running 
      
      
      
      TaskHost th=(TaskHost)pkgIn.Executables[2];
      
      th.Disable =true;
      pkgResults_Sql = pkgIn.Execute();
      
      //Message box will show either Success/Failure
      
      MessageBox.Show(pkgResults_Sql.ToString()); 
      
    3. 为了执行整个功能,用户必须拥有MSDB数据库的相应权限。

    4. Reference