Görevleri program aracılığıyla ekleme

Görevler aşağıdaki nesne türlerinden birini de run - eklenebilirsaat motoru:

  • [ 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 ]

Bu sınıflar kapsayıcılar olarak kabul edilir ve hepsinin devralan Executables özellik.Kapsayıcılar içerebilir bir koleksiyon kapsayıcı yürütme sırasında çalışma zamanı tarafından işlenen yürütülebilir nesneleri olan görevler.Derlemedeki nesneleri yürütme sırasını belirlenen tüm PrecedenceConstraint küme kapsayıcılardaki her görevde.Öncelik kısıtlamaları etkinleştirmek başarı, başarısızlık veya tamamlanması temel yürütme dallanma bir Executable , koleksiyon.

Her kapsayıcı sahip bir Executables koleksiyon tek tek içeren Executable nesneler.Yürütülebilir her görev devralır ve uygulayan Executable.Execute yöntem ve Executable.Validate yöntem.Bu iki yöntem Çalıştır - tarafından verilirsaat altyapısı her işlem için Executable.

Bir paket için bir görev eklemek için kapsayıcı ile gereken bir Executables Varolan koleksiyon.Çoğu saat, derlemesine ekleyecek görevdir bir paket.Bu kapsayıcı için koleksiyon yürütülebilir yeni görev eklemek için arama Executables.Add yöntem.Yöntem CLSID, ProgID, hisse SENEDİ ad içeren bir dize, tek bir parametreye sahip veya TaskInfo.CreationName eklediğiniz görev.

Görev adları

Görev adı veya kimliği, belirtebilseniz de STOCK addır, en sık kullanılan parametre Executables.Add yöntem.Bir yürütülebilir dosya tarafından tanımlanan bir görevi eklemek için STOCK takma adı, aşağıdaki sözdizimini kullanın:

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

Aşağıdaki liste, her görev için sonra kullanılan adları gösterir STOCK takma adı.

  • ActiveXScriptTask

  • BulkInsertTask

  • ExecuteProcessTask

  • ExecutePackageTask

  • Exec80PackageTask

  • FileSystemTask

  • FTPTask

  • MSMQTask

  • PipelineTask

  • ScriptTask

  • SendMailTask

  • SQLTask

  • TransferStoredProceduresTask

  • TransferLoginsTask

  • TransferErrorMessagesTask

  • TransferJobsTask

  • TransferObjectsTask

  • TransferDatabaseTask

  • WebServiceTask

  • WmiDataReaderTask

  • WmiEventWatcherTask

  • XMLTask

Daha açık bir sözdizimine tercih ediyorsanız veya eklemek istediğiniz görev bir hisse SENEDİ takma ad yoksa, görev uzun adını kullanarak yürütülebilir dosyaya ekleyebilirsiniz.Bu sözdizimini de görev sürüm sayısını belirtmek gerekir.

      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")

Görev sürüm kullanarak belirtmek zorunda kalmadan uzun adı görev programlı olarak edinebilirsiniz AssemblyQualifiedName sınıfının özellik aşağıdaki örnekte gösterildiği gibi.Bu örnek Microsoft.SqlServer.SQLTask derleme başvurusu gerektirir.

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)

Aşağıdaki kod örneği nasıl oluşturulacağını gösterir bir Executables koleksiyon karşı yeni bir paket dosya sistemi görev ve Bulk INSERT görev koleksiyon, kullanarak kendi STOCK takma ad.Bu örnek, Microsoft.SqlServer.FileSystemTask ve Microsoft.SqlServer.BulkInsertTask derlemeler başvuru gerektirir.

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

Örnek Çıktı:

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

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

TaskHost kabı

The TaskHost class is a container that does not appear in the graphical user interface, but is very important in programming.Bu sınıf, her görev için bir sarıcı ' dir.paket kullanılarak eklenen görevleri Add yöntem olarak bir Executable nesne artığını olarak bir TaskHost nesne.Ne zaman bir görev artığını olarak bir TaskHost, ek özellikler ve yöntemler görev. kullanabilirsinizAyrıca, görev aracılığıyla erişilebilen InnerObject özellik TaskHost.Gereksinimlerinize bağlı olarak, görev olarak tutmaya karar verebilir bir TaskHost kadar görev özelliklerini kullanabilmesi için nesne Properties koleksiyon.Kullanmanın avantajı Properties olduğundan emin yazmak daha genel kod.Bir görev için çok özel kodu gerekiyorsa, kendi uygun nesne göreve artığını.

Aşağıdaki kod örneği artığını gösterilmiştir bir TaskHost, içeren thBulkInsertTask bir BulkInsertTask, çok bir BulkInsertTask nesne.

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

Aşağıdaki kod örneği için yürütülebilir artığını gösterilmiştir bir TaskHostve InnerObject özellik belirleme yürütülebilir türünü Mike Truitt tarafından ana bilgisayar.

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

Örnek Çıktı:

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

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

The Executables.Add statement returns an executable that is cast to a TaskHost object from the newly created Executable object.

İçin küme özellikler veya yeni nesne üzerinde yöntem çağrısı için iki seçeneğiniz vardır:

  1. Use the Properties koleksiyon of the TaskHost.Örneğin, elde etmek için bir özellik nesneden kullanmak th.Properties["propertyname"].GetValue(th)).İçin küme bir özellik kullanmak th.Properties["propertyname"].SetValue(th, <value>);.

  2. Cast InnerObject , TaskHost için görev tanýmýnaÖrneğin Bulk INSERT göreve artığını, bir BulkInsertTask bir paket olarak eklendikten sonra bir Executable için sonradan artığını ve bir TaskHostkullanın BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.

Kullanarak TaskHost kodu, görev özgü sınıf çevrim yerine sınıfında aşağıdaki avantajları vardır:

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

  • derleme saat görevin adını bilmek zorunda değilsiniz çünkü herhangi bir görev için çalışma genel yordamları kodu.Tüm görevler, görev adını yönteme ve burada yöntem kodu çalışır yöntemleri gibi genel yordamları içerir.Bu test kodu yazmak için iyi yöntem.

Den vuran TaskHost görev özgü sınıf için aşağıdaki avantajları vardır:

  • Visual Studio proje, deyim tamamlama (IntelliSense) verir.

  • Kod daha hızlı çalışabilir.

  • Görev özgü nesneleri erken bağlama ve ortaya çıkan en iyi duruma getirmeleri etkinleştir.Erken ve geç bağlama hakkında daha fazla bilgi için "Erken ve geç bağlama" konusuna bakın. Visual Basic dil kavramları içinde.

Aşağıdaki kod örneği, görev kodu yeniden kullanma kavramı üzerinde genişletir.Çevrim görevleri yerine, belirli bir sınıf eşdeğerleri, kod örneği için yürütülebilir artığını gösterilmiştir bir TaskHostve Properties karşı genel kod yazmak içintüm görevleri.

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 simgesi (küçük)Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve seçilen topluluk çözümleri yanı sıra Microsoft videolar için ziyaret Integration Services sayfa msdn veya TechNet:

Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.