共用方式為


以程式設計的方式在本機電腦上執行 SSIS 封裝

只要利用本機電腦上的幾行 Managed 程式碼與正確的必要條件,您便可以從自訂應用程式執行封裝。自訂應用程式可能是 Windows Forms 應用程式、主控台應用程式、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

附註附註
用以搭配 SSIS 封裝存放區使用之Application 類別的方法僅支援 "."、localhost 或是本機伺服器的伺服器名稱。您無法使用 "(local)"。

SQL Server

LoadFromSqlServer

執行 SSIS 封裝的方法

若要在本機電腦上以程式設計方式執行封裝,請依前一節中的說明載入封裝,然後呼叫封裝的 Execute 方法。

範例

使用下列步驟以 Managed 程式碼開發會於本機電腦載入並執行的自訂應用程式。接下來的程序為示範該程序中步驟的範例主控台應用程式。

以程式設計的方式在本機電腦上載入並執行封裝

  1. 啟動 Visual Studio 開發環境,並以慣用的開發語言建立新應用程式。

    此範例使用主控台應用程式。不過,您也可以從 Windows Form 應用程式、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 摘要。