如何从 .NET 以编程方式调用 SSIS?

Posted

技术标签:

【中文标题】如何从 .NET 以编程方式调用 SSIS?【英文标题】:How can I call SSIS programmatically from .NET? 【发布时间】:2010-09-15 14:04:43 【问题描述】:

我有一个应用程序,每当文件上传到目录时,我都必须调用 SSIS 来解析 XML 文件。

我可以直接从 .NET Windows 服务调用 SSIS 吗?

【问题讨论】:

【参考方案1】:

Running SSIS package programmatically.

我更喜欢第二种方法:

启动 DTEXEC.EXE 进程。 DTEXEC 是用于执行 SSIS 包的命令行实用程序。在此处查看其命令行选项:http://msdn2.microsoft.com/en-us/library/ms162810.aspx

好处:在进程外运行包获得可靠性。可用于任何编程语言(包括 .NET 1.1 :))。通过设置变量值轻松传递参数。

缺点:也仅限本地。更难获得有关包进度的信息(但 SSIS 日志记录可以为您提供大部分功能)。启动新进程的一些开销(与大包的执行时间相比可能很小)。

ASP.NET 特定:Win32 CreateProcess 函数忽略线程模拟。因此,如果您希望 DTEXEC 在不同于 ASP.NET 进程帐户的帐户下运行,您应该让用户输入名称/密码并将其传递给 Process.Start,或者使用以下 KB 中描述的方法在模拟帐户下运行子进程@ 987654323@.

【讨论】:

在 service/.net 应用程序中运行包的好处:您可以将对象传递给包的变量集合。 (尝试将对象传递给 dtexec...)【参考方案2】:

您可以通过编程方式运行您的 SSIS 包,如下所示:

using System;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

namespace ConsoleApplicationSSIS

    class Program
    
        static void Main(string[] args)
        
            Console.WriteLine("Loading SSIS Service...");
            //Application object allows load your SSIS package
            Application app = new Application();
            //In order to retrieve the status (success or failure) after running SSIS Package
            DTSExecResult result ;
            //Specify the location of SSIS package - dtsx file
            string SSISPackagePath = @"C:\Microsofts\BI\SSIS\ConsoleApplicationSSIS\IntegrationServiceScriptTask\Package.dtsx";
            //Load your package
            Package pckg = (Package)app.LoadPackage(SSISPackagePath,true,null);
            //Execute the package and retrieve result
            result  = pckg.Execute();
            //Print the status success or failure of your package
            Console.WriteLine("0", result.ToString());
            Console.ReadLine();
        
    
 

如果您想要完整的示例,请访问:http://hassanboutougha.wordpress.com/2012/10/13/run-your-ssis-package-progammatically/

我解释了如何创建一个简单的 SSIS 包,以及如何从控制台应用程序以编程方式调用它。不要忘记让这个程序集 :C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.DTSRuntimeWrap.dll 引用运行时 ssis 命名空间

您还可以通过编程方式传递变量并更改 ssis 包的源和目标连接

【讨论】:

【参考方案3】:

您可以使用 DTS 运行时以编程方式调用 SSIS、执行包并从 .NET 代码更改配置。 Here is complete code of how you can do it.

【讨论】:

【参考方案4】:

您可以从 Windows 服务调用 SSIS 包。但是 Microsoft.SqlServer.Dts 应该安装到要运行 windows 服务的系统中。如果您在该机器上安装了 DTS,则直接调用 SSIS 包。如果未安装,则应执行以下操作。

    创建 SSIS 包 创建运行 SSIS 包的作业 在您的 ADO.NET[驻留在 Windows 服务代码中],调用存储 运行作业的过程[配置为运行 SSIS 包]。 以下是应从您的 .NET 代码中调用的示例。

EXEC msdb.dbo.sp_start_job N'YourJobName'

希望这会有所帮助!

【讨论】:

【参考方案5】:

更新这个很老的问题:

在 SQL Server 2012 上,您只需创建将调用 create_executionset_execution_parameter 的存储过程即可完成此操作

可在此处找到分步指南:https://blogs.msdn.microsoft.com/biblog/2013/05/07/step-by-step-of-executing-ssis-2012-package-through-stored-procedure/

【讨论】:

以上是关于如何从 .NET 以编程方式调用 SSIS?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式从 .NET 中的注册表中删除 Windows 产品密钥?

如何创建可以从以编程方式创建的按钮调用的 segue?

如何以编程方式获取用户需要从 lync 会议中调用的会议 ID?

如何以编程方式调用View Controller?

从SQL Server代理作业步骤调用时,SSIS包不会运行

如何以编程方式为 Kendo Ui 调度程序调用导航事件