Udostępnij za pośrednictwem


Dodawanie zadania programowe

Zadania mogą być dodawane do następujących typów obiektów w procesie-czas aparatu:

  • Package

  • Sequence

  • ForLoop

  • ForEachLoop

  • DtsEventHandler

Te klasy są traktowane jako kontenerów, a wszystkie dziedziczą Executables() Właściwość. Kontenery może zawierać zestaw zadań, które są przetwarzane w czasie wykonywania, podczas wykonywania kontener obiekty wykonywalne.Kolejność wykonywania obiektów w kolekcja jest określana wszystkie PrecedenceConstraint Ustaw nad każdym zadaniem w pojemnikach. Pierwszeństwo ograniczenia umożliwiają wykonywanie branching oparty na sukces, Niepowodzenie lub zakończenia Executable w kolekcja.

Każdy pojemnik ma Executables Kolekcja, która zawiera poszczególne Executable obiekty. Każde zadanie wykonywalnego dziedziczy i implementuje ExecutableExecute(Connections, Variables, IDTSEvents, IDTSLogging, Object) metody i ExecutableValidate(Connections, Variables, IDTSEvents, IDTSLogging) Metoda. Te dwie metody są wywoływane przez uruchomienie-czas aparat do przetworzenia każdego Executable.

Aby dodać zadanie do pakiet, należy kontener z Executables Kolekcja istniejących. W większości przypadków, zadanie, które chcesz dodać do kolekcja jest pakiet.Aby dodać nowe zadanie wykonywalny do kolekcja dla tego kontener, wywołaj ExecutablesAdd(String) Metoda. Metoda ma jeden parametr, ciąg znaków, zawierający moniker akcyjnego PROGID, identyfikator klasy, lub TaskInfoCreationName() zadania, które dodajesz.

Nazwy zadań

Mimo że można określić zadania według ich nazw lub identyfikator, STOCK Moniker jest parametrem najczęściej używane w ExecutablesAdd(String) Metoda. Aby dodać zadanie do pliku wykonywalnego, identyfikowane przez STOCK Moniker, należy użyć następującej składni:

      Executable exec = package.Executables.Add("STOCK:BulkInsertTask");

    Dim exec As Executable = package.Executables.Add("STOCK:BulkInsertTask")

Na poniższej liście przedstawiono nazwy dla każdego zadania, które są używane po STOCK Moniker.

  • ActiveXScriptTask

  • BulkInsertTask

  • ExecuteProcessTask

  • ExecutePackageTask

  • Exec80PackageTask

  • FileSystemTask

  • FTPTask

  • MSMQTask

  • PipelineTask

  • ScriptTask

  • SendMailTask

  • SQLTask

  • TransferStoredProceduresTask

  • TransferLoginsTask

  • TransferErrorMessagesTask

  • TransferJobsTask

  • TransferObjectsTask

  • TransferDatabaseTask

  • WebServiceTask

  • WmiDataReaderTask

  • WmiEventWatcherTask

  • XMLTask

Jeśli wolisz, aby uzyskać dokładniejsze składni lub zadanie, które chcesz dodać, nie ma moniker akcyjnego, można dodać zadanie do przy użyciu jego długą nazwę pliku wykonywalnego.Ta składnia wymaga także określić numer wersja tego zadania.

      Executable exec = package.Executables.Add(
        "Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask, " +
        "Microsoft.SqlServer.ScriptTask, Version=10.0.000.0, " +
        "Culture=neutral, PublicKeyToken=89845dcd8080cc91");
    Dim exec As Executable = package.Executables.Add( _
      "Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask, " & _
      "Microsoft.SqlServer.ScriptTask, Version=10.0.000.0, " & _
      "Culture=neutral, PublicKeyToken=89845dcd8080cc91")

Długie nazwy zadania, można uzyskać programowo, bez konieczności określania wersja zadania przy użyciu AssemblyQualifiedName właściwość tej klasy, jak pokazano w poniższym przykładzie.W tym przykładzie wymaga odwołania do wirtualny plik dziennika Microsoft.SqlServer.SQLTask.

using Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask;
...
      Executable exec = package.Executables.Add(
        typeof(Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask).AssemblyQualifiedName);
Imports Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask
...
    Dim exec As Executable = package.Executables.Add( _
      GetType(Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask).AssemblyQualifiedName)

W poniższym przykładzie kodu pokazano sposób tworzenia Executables Kolekcja z nowego pakiet, a następnie dodaj zbiorcze Wstaw zadania i zadania systemu plików do kolekcji, przy użyciu ich STOCK monikerów. W tym przykładzie wymaga odwołania do zestawów Microsoft.SqlServer.FileSystemTask i Microsoft.SqlServer.BulkInsertTask.

using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Tasks.FileSystemTask;
using Microsoft.SqlServer.Dts.Tasks.BulkInsertTask;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      Package p = new Package();
      // Add a File System task to the package.
      Executable exec1 = p.Executables.Add("STOCK:FileSystemTask");
      TaskHost thFileSystemTask = exec1 as TaskHost;
      // Add a Bulk Insert task to the package.
      Executable exec2 = p.Executables.Add("STOCK:BulkInsertTask");
      TaskHost thBulkInsertTask = exec2 as TaskHost;

      // Iterate through the package Executables collection.
      Executables pExecs = p.Executables;
      foreach (Executable pExec in pExecs)
      {
        TaskHost taskHost = (TaskHost)pExec;
        Console.WriteLine("Type {0}", taskHost.InnerObject.ToString());
      }
      Console.Read();
    }
  }
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Tasks.FileSystemTask
Imports Microsoft.SqlServer.Dts.Tasks.BulkInsertTask

Module Module1

  Sub Main()

    Dim p As Package = New Package()
    ' Add a File System task to the package.
    Dim exec1 As Executable = p.Executables.Add("STOCK:FileSystemTask")
    Dim thFileSystemTask As TaskHost = CType(exec1, TaskHost)
    ' Add a Bulk Insert task to the package.
    Dim exec2 As Executable = p.Executables.Add("STOCK:BulkInsertTask")
    Dim thBulkInsertTask As TaskHost = CType(exec2, TaskHost)

    ' Iterate through the package Executables collection.
    Dim pExecs As Executables = p.Executables
    Dim pExec As Executable
    For Each pExec In pExecs
      Dim taskHost As TaskHost = CType(pExec, TaskHost)
      Console.WriteLine("Type {0}", taskHost.InnerObject.ToString())
    Next
    Console.Read()

  End Sub

End Module

Przykładowe dane wyjściowe:

Wpisz Microsoft.SqlServer.dts.Tasks.FileSystemTask.FileSystemTask

Wpisz Microsoft.SqlServer.dts.Tasks.BulkInsertTask.BulkInsertTask

Kontener TaskHost

The TaskHost class is a kontener that does not appear in the graphical user interfejs, but is very important in programming. Ta klasa jest otoką dla każdego zadania.Zadania, które są dodawane do pakiet przy użyciu Add(String) Metoda jak Executable obiekt może być rzutowane jako TaskHost obiekt. Kiedy zadanie jest rzutować jako TaskHost, dodatkowe właściwości i metod można użyć do zadania. Ponadto zadanie sam mogą być udostępniane za pośrednictwem InnerObject() Właściwość TaskHost. W zależności od potrzeb, może się okazać do przechowywania zadań jako, TaskHost obiekt, dzięki czemu można używać właściwości zadania za pomocą Properties() Kolekcja. Zaletą korzystania z Properties() to można napisać kod bardziej ogólne. Należy bardzo specyficzny kod zadania zostanie powinno rzutować zadania, jego odpowiedniego obiektu.

W poniższym przykładzie kodu pokazano, jak do oddania TaskHost, thBulkInsertTask, który zawiera BulkInsertTask, aby BulkInsertTask obiekt.

      BulkInsertTask myTask = thBulkInsertTask.InnerObject as BulkInsertTask;
    Dim myTask As BulkInsertTask = CType(thBulkInsertTask.InnerObject, BulkInsertTask)

W poniższym przykładzie kodu pokazano, jak do oddania pliku wykonywalnego, który ma być TaskHost, a następnie użyj InnerObject() właściwość, aby ustalić, jakiego typu pliki wykonywalne znajduje się przez hosta.

using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Tasks.FileSystemTask;
using Microsoft.SqlServer.Dts.Tasks.BulkInsertTask;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      Package p = new Package();
      // Add a File System task to the package.
      Executable exec1 = p.Executables.Add("STOCK:FileSystemTask");
      TaskHost thFileSystemTask1 = exec1 as TaskHost;
      // Add a Bulk Insert task to the package.
      Executable exec2 = p.Executables.Add("STOCK:BulkInsertTask");
      TaskHost thFileSystemTask2 = exec2 as TaskHost;

      // Iterate through the package Executables collection.
      Executables pExecs = p.Executables;
      foreach (Executable pExec in pExecs)
      {
        TaskHost taskHost = (TaskHost)pExec;
        if (taskHost.InnerObject is Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask)
        {
          // Do work with FileSystemTask here.
          Console.WriteLine("Found task of type {0}", taskHost.InnerObject.ToString());
        }
        else if (taskHost.InnerObject is Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask)
        {
          // Do work with BulkInsertTask here.
          Console.WriteLine("Found task of type {0}", taskHost.InnerObject.ToString());
        }
        // Add additional statements to check InnerObject, if desired.
      }
      Console.Read();
    }
  }
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Tasks.FileSystemTask
Imports Microsoft.SqlServer.Dts.Tasks.BulkInsertTask

Module Module1

  Sub Main()

    Dim p As Package = New Package()
    ' Add a File System task to the package.
    Dim exec1 As Executable = p.Executables.Add("STOCK:FileSystemTask")
    Dim thFileSystemTask1 As TaskHost = CType(exec1, TaskHost)
    ' Add a Bulk Insert task to the package.
    Dim exec2 As Executable = p.Executables.Add("STOCK:BulkInsertTask")
    Dim thFileSystemTask2 As TaskHost = CType(exec2, TaskHost)

    ' Iterate through the package Executables collection.
    Dim pExecs As Executables = p.Executables
    Dim pExec As Executable
    For Each pExec In pExecs
      Dim taskHost As TaskHost = CType(pExec, TaskHost)
      If TypeOf taskHost.InnerObject Is Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask Then
        ' Do work with FileSystemTask here.
        Console.WriteLine("Found task of type {0}", taskHost.InnerObject.ToString())
      ElseIf TypeOf taskHost.InnerObject Is Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask Then
        ' Do work with BulkInsertTask here.
        Console.WriteLine("Found task of type {0}", taskHost.InnerObject.ToString())
      End If
      ' Add additional statements to check InnerObject, if desired.
    Next
    Console.Read()

  End Sub

End Module

Przykładowe dane wyjściowe:

Znaleziono zadania typu Microsoft.SqlServer.dts.Tasks.FileSystemTask.FileSystemTask

Znaleziono zadania typu Microsoft.SqlServer.dts.Tasks.BulkInsertTask.BulkInsertTask

The ExecutablesAdd(String) instrukcja returns an executable that is cast to a TaskHost object from the newly created Executable object.

Aby zestaw właściwości lub do wywołania metody do nowego obiektu, dostępne są dwie opcje:

  1. Użycie Properties() Kolekcja TaskHost. Na przykład aby uzyskać właściwość obiektu, należy użyć th.Properties["propertyname"].GetValue(th)). Aby zestaw właściwość, zastosować th.Properties["propertyname"].SetValue(th, <value>);.

  2. Obsada InnerObject() z TaskHost do klasy zadania. Na przykład, aby rzutować zbiorcze Wstaw zadania, BulkInsertTask po jego dodaniu do pakiet jako Executable a następnie oddać do TaskHost, należy użyć BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.

Za pomocą TaskHost Klasa w kodzie zamiast rzutowania do klasy specyficznych zadań ma następujące zalety:

  • The TaskHostProperties() provider does not require a reference to the assembly in the code.

  • Rodzajowy procedur, które działa w przypadku każdego zadania można kodu, ponieważ nie trzeba znać nazwy zadania czas kompilacji.Tych ogólnych procedur obejmują metoda gdzie przekazać na rzecz zadania do metoda, a kod metoda działa dla wszystkich zadań.Jest to dobry metoda pisania kodu testu.

Rzutowanie z TaskHost do klasy specyficznych zadań ma następujące zalety:

  • Projekt programu Visual Studio umożliwia zostanie Kończenie instrukcja (IntelliSense).

  • Kod może działać szybciej.

  • Obiekty specyficzne dla zadania umożliwić wczesne wiązanie i optymalizacje typu Wynikowe.Aby uzyskać więcej informacji na temat wczesnych i późne wiązanie zobacz temat "Wczesnym a późnym powiązania" w pojęcia związane z języka Visual Basic.

W poniższym przykładzie kodu rozszerza się na koncepcji ponowne użycie kodu zadania.Zamiast rzutowania zadań na ich odpowiedniki określonej klasy, w przykładzie kodu pokazano, jak do oddania pliku wykonywalnego, który ma być TaskHost, a następnie używa Properties() Aby zapisać kod rodzajowy od wszystkich zadań.

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

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      Package package = new Package();

      string[] tasks = { "STOCK:SQLTask", "STOCK:ScriptTask", 
        "STOCK:ExecuteProcessTask", "STOCK:PipelineTask", 
        "STOCK:FTPTask", "STOCK:SendMailTask", "STOCK:MSMQTask" };

      foreach (string s in tasks)
      {
        TaskHost taskhost = package.Executables.Add(s) as TaskHost;
        DtsProperties props = taskhost.Properties;
        Console.WriteLine("Enumerating properties on " + taskhost.Name);
        Console.WriteLine(" TaskHost.InnerObject is " + taskhost.InnerObject.ToString());
        Console.WriteLine();

        foreach (DtsProperty prop in props)
        {
          Console.WriteLine("Properties for " + prop.Name);
          Console.WriteLine("Name : " + prop.Name);
          Console.WriteLine("Type : " + prop.Type.ToString());
          Console.WriteLine("Readable : " + prop.Get.ToString());
          Console.WriteLine("Writable : " + prop.Set.ToString());
          Console.WriteLine();
        }
      }
      Console.Read();
    }
  }
}
Imports Microsoft.SqlServer.Dts.Runtime

Module Module1

  Sub Main()

    Dim package As Package = New Package()

    Dim tasks() As String = New String() {"STOCK:SQLTask", "STOCK:ScriptTask", _
              "STOCK:ExecuteProcessTask", "STOCK:PipelineTask", _
              "STOCK:FTPTask", "STOCK:SendMailTask", "STOCK:MSMQTask"}

    For Each s As String In tasks

      Dim taskhost As TaskHost = CType(package.Executables.Add(s), TaskHost)
      Dim props As DtsProperties = taskhost.Properties
      Console.WriteLine("Enumerating properties on " & taskhost.Name)
      Console.WriteLine(" TaskHost.InnerObject is " & taskhost.InnerObject.ToString())
      Console.WriteLine()

      For Each prop As DtsProperty In props
        Console.WriteLine("Properties for " + prop.Name)
        Console.WriteLine(" Name : " + prop.Name)
        Console.WriteLine(" Type : " + prop.Type.ToString())
        Console.WriteLine(" Readable : " + prop.Get.ToString())
        Console.WriteLine(" Writable : " + prop.Set.ToString())
        Console.WriteLine()
      Next

    Next
    Console.Read()

  End Sub

End Module
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.

See Also

Concepts