Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SSIS包中使用C应用程序中的变量_C#_Ssis - Fatal编程技术网

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

C# 如何在SSIS包中使用C应用程序中的变量,c#,ssis,C#,Ssis,我对VC和SSI都是新手。但这里是我的场景,我在一个SQL数据库中有来自多个项目的数据,即多项目模式一个SQL数据库存储来自多个项目的数据。此数据根据项目ID字段进行分隔。我正在尝试创建一个C应用程序,它在它的一个组合框字段中提取这个项目id,并在我单击“导出数据”按钮后在项目上运行SSIS包。现在我想在SSIS包中使用这个项目id,这样包数据流应该只在该项目上执行 我已经在C代码中添加了这一点,但不确定这是否正确: public void button2_Click(object sender

我对VC和SSI都是新手。但这里是我的场景,我在一个SQL数据库中有来自多个项目的数据,即多项目模式一个SQL数据库存储来自多个项目的数据。此数据根据项目ID字段进行分隔。我正在尝试创建一个C应用程序,它在它的一个组合框字段中提取这个项目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);
    }
}
注意:PROJ_ID是在包中调用的主要变量,但我可能还需要projectroot、name和path

如果这是正确的,那么如何在SSIS包中定义和使用这些变量? 如何在SSIS包中进一步进行?我可以猜到我必须写脚本任务,但同样地,它会花费我很多时间来学习和写作。如果你能指导我,并提供一些样本代码,那么它将是非常有用的

提前谢谢


Vishal

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

创建一个调用SSIS包的作业。 创建一个表,其中包含包使用的变量的值。该表还必须包含某种作业结果列。 在包的开头包含一个步骤,该步骤从JobResult为NULL的表的第一行读取其变量的值。 在包的末尾包含一个步骤,该步骤更新变量表中的JobResult列,包括Success、Failure或任何您想要的内容,只要它不为NULL。 在C语言中,使用所需的变量值填充表,然后启动作业。
希望这能有所帮助。

嗨,非常感谢您的回复。我会试试这个。您的过程非常清楚,您是否有任何参考链接要遵循实时示例?不,这是几年前的事了,我不记得我是否遵循任何链接来创建解决方案。