C# 如何从.NET以编程方式调用SSI?

C# 如何从.NET以编程方式调用SSI?,c#,.net,sql-server,ssis,C#,.net,Sql Server,Ssis,我有一个应用程序,每当文件上传到目录时,我都必须调用SSIS来解析XML文件 我可以直接从.NET Windows服务调用SSIS吗? 我更喜欢第二种方法: 启动DTEXEC.EXE进程。DTEXEC是用于执行SSIS包的命令行实用程序。请参见此处的命令行选项: 好处:在进程外运行包可以提高可靠性。可以从任何编程语言(包括.NET 1.1:)中使用。通过设置变量值轻松传递参数 缺点:也只是本地的。很难获得有关包进度的信息(但SSIS日志可以为您提供大部分功能)。启动新流程的一些开销(与大型包的执

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

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

我更喜欢第二种方法:

启动DTEXEC.EXE进程。DTEXEC是用于执行SSIS包的命令行实用程序。请参见此处的命令行选项:

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

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


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

您可以通过编程方式调用SSIS,使用DTS运行时从.NET代码执行包并更改配置

您可以通过编程方式运行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\assembly\Microsoft.SQLServer.DTSRuntimeWrap.dll来引用运行时ssis命名空间


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

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

  • 创建SSIS包
  • 创建运行SSIS包的作业
  • 在ADO.NET[驻留在windows服务代码中]中,存储了调用 运行作业[配置为运行SSIS包]的过程。 下面是一个应该从.NET代码中调用的示例
  • EXEC msdb.dbo.sp_start_job N'YourJobName'


    希望这有帮助

    更新这个非常老的问题:

    在SQL Server 2012上,您只需创建一个存储过程,该存储过程将调用
    create\u execution
    set\u execution\u parameter

    可在此处找到分步指南:


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