如何在SSIS包中使用C#应用程序中的变量

时间:2014-12-08 21:02:10

标签: c# ssis

我是VC#和SSIS的新手。但这是我的方案,我有来自单个SQL数据库中多个项目的数据,即多项目模式(一个SQL数据库存储来自多个项目的数据)。该数据基于proj_ID字段分离。我正在尝试创建C#应用程序,它将其proj_id拉入其中一个组合框字段,并在单击“导出数据”按钮后在项目上运行SSIS包。现在我想在SSIS包中使用这个项目id,这样包数据流只能在该项目上执行。

我在C#代码中添加了这个,但不确定这是否正确:

public void button2_Click(object sender, EventArgs e)
{
    //Start the SSIS Here    
    try
    {
        Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
        Package package = null;
        package = app.LoadPackage(@"C:\SSIS_Projects\XXX_Project\XXXX_Project\Package.dtsx", null);
        Microsoft.SqlServer.Dts.Runtime.Variables myVars = package.Variables;
        myVars["projectroot"].Value = projectroot;
        myVars["path8"].Value =path8;
        myVars["PROJ_NAME"].Value = comboBox1.ValueMember;
        myVars["PROJ_ID"].Value = comboBox2.ValueMember;
        //Excute Package 
        // working Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
        Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute(null, myVars, null, null, null);

        if (results == Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure)
        {
            foreach (Microsoft.SqlServer.Dts.Runtime.DtsError local_DtsError in package.Errors)
            {
                Console.WriteLine("Package Execution results: {0}", local_DtsError.Description.ToString());
                Console.WriteLine();
            }
        }
    }
    catch (DtsException ex)
    {
        throw new FileNotFoundException("[Package.dtsx not found in directory]", ex);
    }
}

P.S:PROJ_ID是调用包中的主要变量,但我可能还需要projectroot,名称和路径。

如果这是正确的,那么如何在SSIS包中定义和使用这些变量? 如何进一步深入SSIS包?我猜我必须编写脚本任务,但是我需要花费大量的时间来学习和编写。如果您可以指导我并提供一些示例代码,那么它将非常有用。

提前致谢。

维沙尔

1 个答案:

答案 0 :(得分:0)

我不记得为什么,但我确实记得当我需要使用C#中的变量执行SSIS包时,这个方法最终对我有用:

  1. 创建一个调用SSIS包的作业。
  2. 创建一个表,其中包含程序包使用的变量的值。该表还必须包含某种“作业结果”列。
  3. 在包的开头包含一个步骤,该步骤从表中第一行读取其变量的值,该行中的JobResult为NULL。
  4. 在包的末尾包含一个步骤,用于更新变量表中的JobResult列,“Success”,“Failure”或任何你想要的,只要它不是NULL。
  5. 在C#中,使用所需的变量值填充表格,然后启动作业。
  6. 希望这有帮助。