Udostępnij za pośrednictwem


Dodawanie zadania programistyczne

Zadania mogą być dodawane do następujących typów obiektów w programie wykonywania -czas silnika:

  • [ T:Microsoft.SqlServer.Dts.Runtime.Package ]

  • [ T:Microsoft.SqlServer.Dts.Runtime.Sequence ]

  • [ T:Microsoft.SqlServer.Dts.Runtime.ForLoop ]

  • [ T:Microsoft.SqlServer.Dts.Runtime.ForEachLoop ]

  • [ T:Microsoft.SqlServer.Dts.Runtime.DtsEventHandler ]

Te klasy są traktowane jako kontenery i dziedziczą one wszystkie Executables właściwość.Kontenery mogą zawierać kolekcja zadań, które są przetwarzane przez aparat plików wykonywalnych podczas wykonywania kontener obiekty wykonywalne.Określić kolejność wykonywania obiektów kolekcja wszelkich PrecedenceConstraint zestaw nad każdym zadaniem w pojemnikach.Włączanie więzów kolejności wykonanie rozgałęzianie oparte na sukces, Niepowodzenie lub zakończenia Executable kolekcja.

Każdy kontener ma Executables kolekcja, która zawiera poszczególne Executable obiektów.Każde zadanie wykonywalny dziedziczy i implementuje Executable.Execute metoda i Executable.Validate metoda.Te dwie metody są wywoływane przez uruchomienie -czas aparatu przetwarzania każdego Executable.

Aby dodać zadanie do pakiet, należy kontener z Executables istniejących kolekcja.Większość z czas, zadanie zostanie dodany do zbioru jest pakiet.Aby dodać nowe zadanie wykonywalny do kolekcja dla kontener, call Executables.Add metoda.Metoda ma jeden parametr, ciąg znaków zawierający moniker zapasów PROGID, CLSID, lub TaskInfo.CreationName zadania dodajesz.

Nazwy zadań

Chociaż można określić zadania według nazwy lub Identyfikatora, STOCK moniker jest parametr najczęściej używane w Executables.Add metoda.Aby dodać zadanie do pliku wykonywalnego określonego 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")

Poniższa lista zawiera nazwy dla każdego zadania, które są używane po STOCK monikera.

  • 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 zapasów, można dodać zadanie do przy użyciu długiej nazwy pliku wykonywalnego.Ta składnia wymaga również określić numer wersja 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 zadań za pomocą AssemblyQualifiedName właściwość klasy, jak pokazano w następującym 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)

Poniższy przykład kodu pokazuje jak utworzyć Executables kolekcja nowy pakiet, a następnie dodać zadanie systemu plików i zadań Wstaw luzem do kolekcja, przy użyciu ich STOCK monikerów.W tym przykładzie wymaga odwołania do zespołó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:

Type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask

Type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask

Kontener TaskHost

TaskHost Klasy jest kontener, który nie ma graficznego interfejs użytkownika, ale bardzo ważną rolę w programowaniu.Ta klasa jest otoki dla każdego zadania.Zadania, które są dodawane do pakiet przy użyciu Add metoda jako Executable obiektu można rzutować jako TaskHost obiektu.Gdy zadanie jest oddane jako TaskHost, można użyć dodatkowe właściwości i metody na zadanie.Ponadto samego zadania można uzyskać dostęp za pośrednictwem InnerObject Właściwość TaskHost.W zależności od potrzeb, może zadecydować zachować zadanie jako TaskHost obiekt, dzięki czemu można użyć właściwości zadania za pomocą Properties kolekcja.Zaletą korzystania z Properties jest, że można napisać kod bardziej ogólny.Należy bardzo specyficzny kod zadania powinny oddać jej odpowiedniego obiektu zadania.

Poniższy przykład kodu pokazuje jak oddanych TaskHost, thBulkInsertTask, który zawiera BulkInsertTask, do BulkInsertTask obiektu.

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

Poniższy przykład kodu pokazuje jak plik wykonywalny do oddania TaskHost, a następnie użyj InnerObject właściwość w celu określenia typu pliku wykonywalnego zawarte 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:

Found task of type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask

Found task of type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask

Executables.Add Instrukcja zwraca plik wykonywalny, który oddanych do TaskHost nowo utworzonego obiektu Executable obiektu.

Aby zestaw właściwości lub do wywoływania metody na nowy obiekt, masz dwie opcje:

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

  2. Rzutowanie InnerObject z TaskHost do klasy zadaniaNa przykład, aby rzutować zadania Wstaw luzem BulkInsertTask po został dodany do pakiet jako Executable i następnie oddać do TaskHost, użyj BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.

Za pomocą TaskHost klasy w kodzie zamiast rzutowanie klasy poszczególnych zadań ma następujące zalety:

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

  • Można Kod rodzajowy procedur, które działają w dowolnym zadaniem, ponieważ nie trzeba znać nazwę zadania czas kompilacji.Takie procedury ogólne obejmują metoda gdzie przekazać na rzecz zadania do metoda i kod metoda działa dla wszystkich zadań.Jest to dobra metoda do pisania kodu testu.

Rzutowanie z TaskHost do klasy poszczególnych zadań ma następujące zalety:

  • Projekt programu Visual Studio daje możesz Kończenie instrukcja (technologia IntelliSense).

  • Kod może działać szybciej.

  • Obiekty określone zadanie umożliwić wczesne powiązanie i optymalizacje wynikowe.Aby uzyskać więcej informacji dotyczących wczesnego i późnego powiązanie, zobacz temat "wczesnego i zwłoczny powiązanie" w pojęcia języka Visual Basic.

Poniższy przykład kodu rozszerza się na koncepcji ponowne użycie kodu zadania.Zamiast Rzutowanie zadań na ich odpowiedniki określonej klasy, przykład kodu pokazuje jak plik wykonywalny do oddania TaskHost, a następnie używa Properties pisać kod rodzajowy wobec 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
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.

Zobacz także

Koncepcje