以编程方式在本地计算机中运行 SSIS 包

只需几行托管代码并且在本地计算机上满足适当的必备条件,您就可以从自定义应用程序运行包。该自定义程序可以是 Windows 窗体应用程序、控制台应用程序、ASP.NET Web 窗体或 Web 服务或者 Windows 服务运行包。

注意注意

若要根据需要或在预定时间运行 Integration Services 包,可使用在运行包主题中介绍的方法。

本主题的内容

  • 本地计算机的必备条件

  • 创建在本地计算机上加载和运行包的应用程序

    • 加载包的方法

    • 运行包的方法

    • 示例

  • 从运行中的包捕获事件

本地计算机的必备条件

包要与启动包的应用程序运行在同一计算机上。这样,即使应用程序加载的是远程存储于另一台计算机上的包,该包也会在本地计算机上运行。

因此,在本地计算机上加载和运行包具有若干必备条件:

  • 如果包包含对该包的外部资源的引用,则这些引用在本地计算机上必须有效。这些引用包括连接字符串、服务器、文件、消息队列等。

    注意注意

    如果本地计算机没有对该包的外部资源的有效引用,则不能在本地计算机上运行该包。而是必须确保该包运行在远程计算机上。有关详细信息,请参阅在远程计算机上以编程方式运行 SSIS 包

  • 您必须具有该包访问本地计算机上的数据资源和其他资源或者从本地计算机上访问它们所需的所有权限。

  • 只能在开发环境 Business Intelligence Development Studio 外的安装了 Integration Services 的计算机上运行包。

    注意注意

    您的 SQL Server 许可条款可能不允许您在其他计算机上安装 Integration Services。(Integration Services 是服务器组件,不可再分发至客户端或本地计算机。)如果 Integration Services 不在且不能安装在本地计算机上,则必须确保该包运行在远程计算机上。有关详细信息,请参阅在远程计算机上以编程方式运行 SSIS 包

创建在本地计算机上加载和运行 SSIS 包的应用程序

在本主题中,以编程方式加载和运行包的所有方法都需要引用 Microsoft.SqlServer.ManagedDTS 程序集。在新项目中添加该引用后,使用 C# using 语句或者 Visual Basic Imports 语句导入 Microsoft.SqlServer.Dts.Runtime 命名空间。

加载 SSIS 包的方法

若要以编程方式在本地计算机中加载包,无论包是本地存储还是远程存储,都可以调用下表中的方法之一。所有这些方法均返回一个 Package 对象,您可以使用该对象运行包或者检查包的属性。

存储位置

调用的方法

文件

LoadPackage

— 或者 —

LoadPackage

SSIS 包存储区

LoadFromDtsServer

注意注意
Application 类中用于处理 SSIS 包存储区的方法只支持“.”、localhost 或本地服务器的服务器名称。不能使用“(local)”。

SQL Server

LoadFromSqlServer

运行 SSIS 包的方法

若要在本地计算机上以编程方式运行包,请加载前面部分中介绍的包,然后调用该包的 Execute 方法。

示例

使用下面的过程可以使用在本地计算机上加载和运行包的托管代码开发自定义应用程序。在该过程后是一个控制台应用程序的示例,它演示该过程中的各个步骤。

以编程方式在本地计算机中加载和运行包

  1. 启动 Visual Studio 开发环境,以您首选的开发语言创建新的应用程序。

    本示例使用的是控制台应用程序。但是,您也可以从 Windows 窗体应用程序、ASP.NET Web 窗体或 Web 服务或者 Windows 服务运行包。

  2. 在**“项目”菜单中,单击“添加引用”并添加对 Microsoft.SqlServer.ManagedDTS.dll 的引用。单击“确定”**。

  3. 使用 Visual Basic Imports 语句或 C# using 语句导入 Microsoft.SqlServer.Dts.Runtime 命名空间。

  4. 在主例程中,在此过程后添加以下示例代码。

    完成的控制台应用程序应类似于下面部分中的示例代码。

    注意注意

    该示例代码演示如何使用 LoadPackage 方法从文件系统加载包。但您也可以通过调用 LoadFromSqlServer 方法,从 msdb 数据库加载包;或者通过调用 LoadFromDtsServer 方法,从 Integration Services 包存储区加载包。

  5. 运行该项目。

    示例代码执行随 SQL Server 示例安装的 CalculatedColumns 示例包。包执行的结果显示在控制台窗口中。

示例代码

Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Application
    Dim pkgResults As DTSExecResult

    pkgLocation = _
      "C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
      "\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
    pkg = app.LoadPackage(pkgLocation, Nothing)
    pkgResults = pkg.Execute()

    Console.WriteLine(pkgResults.ToString())
    Console.ReadKey()

  End Sub

End Module
using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace RunFromClientAppCS
{
  class Program
  {
    static void Main(string[] args)
    {
      string pkgLocation;
      Package pkg;
      Application app;
      DTSExecResult pkgResults;

      pkgLocation =
        @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
        @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
      app = new Application();
      pkg = app.LoadPackage(pkgLocation, null);
      pkgResults = pkg.Execute();

      Console.WriteLine(pkgResults.ToString());
      Console.ReadKey();
    }
  }
}

从运行中的 SSIS 包捕获事件

当您按照前面部分中的示例所示以编程方式运行包时,还可以捕获包运行时发生的错误及其他事件。为此,请添加从 DefaultEvents 类继承的类,并在加载包时传递对该类的引用。下面的示例仅捕获 OnError 事件,但还有其他很多事件可以通过 DefaultEvents 类捕获。

以编程方式在本地计算机中运行包同时捕获包事件

  1. 按照前面部分的示例中的步骤为此示例创建项目。

  2. 在主例程中,添加在此过程后出现的示例代码。

    完成的控制台应用程序应类似于下面的示例。

  3. 运行该项目。

    示例代码运行随 SQL Server 示例安装的 CalculatedColumns 示例包。包执行的结果显示在控制台窗口中,同时显示发生的所有错误。

示例代码

Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Application
    Dim pkgResults As DTSExecResult

    Dim eventListener As New EventListener()

    pkgLocation = _
      "C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" & _
      "\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx"
    pkg = app.LoadPackage(pkgLocation, eventListener)
    pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)

    Console.WriteLine(pkgResults.ToString())
    Console.ReadKey()

  End Sub

End Module

Class EventListener
  Inherits DefaultEvents

  Public Overrides Function OnError(ByVal source As Microsoft.SqlServer.Dts.Runtime.DtsObject, _
    ByVal errorCode As Integer, ByVal subComponent As String, ByVal description As String, _
    ByVal helpFile As String, ByVal helpContext As Integer, _
    ByVal idofInterfaceWithError As String) As Boolean

    ' Add application–specific diagnostics here.
    Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description)
    Return False

  End Function

End Class
using System;
using Microsoft.SqlServer.Dts.Runtime;

namespace RunFromClientAppWithEventsCS
{
  class MyEventListener : DefaultEvents
  {
    public override bool OnError(DtsObject source, int errorCode, string subComponent, 
      string description, string helpFile, int helpContext, string idofInterfaceWithError)
    {
      // Add application-specific diagnostics here.
      Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description);
      return false;
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      string pkgLocation;
      Package pkg;
      Application app;
      DTSExecResult pkgResults;

      MyEventListener eventListener = new MyEventListener();

      pkgLocation =
        @"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
        @"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
      app = new Application();
      pkg = app.LoadPackage(pkgLocation, eventListener);
      pkgResults = pkg.Execute(null, null, eventListener, null, null);

      Console.WriteLine(pkgResults.ToString());
      Console.ReadKey();
    }
  }
}
Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 上的 Integration Services 页:


若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。