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

4

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

我能否直接从.NET Windows服务中调用SSIS?

5个回答

10

以编程方式运行SSIS包,我更喜欢第二种方法:

启动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中描述的方法以模拟帐户运行子进程http://support.microsoft.com/kb/889251


在您的服务/.net应用程序中运行包的好处:您可以将对象传递给包的变量集合。(尝试将对象传递给dtexec...) - thijs

3
您可以按照以下方式以编程方式运行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包,并且在控制台应用程序中调用它。请不要忘记引用运行时SSIS命名空间的C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.DTSRuntimeWrap.dll程序集。

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


0

0

您可以从您的Windows服务中调用SSIS包。但是在运行Windows服务的系统中必须安装Microsoft.SqlServer.Dts。如果在该机器上已经安装了DTS,那么可以直接调用SSIS包。如果没有安装,则应执行以下操作:

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

EXEC msdb.dbo.sp_start_job N'YourJobName'

希望这可以帮助到您!


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接