Görevleri program aracılığıyla ekleme
Aşağıdaki türde nesneleri çalışma-görevleri eklenebilir saat alt yapısı:
Package
Sequence
ForLoop
ForEachLoop
DtsEventHandler
Bu sınıflar kapsayıcılar olarak düşünülür ve tüm devralma Executables() özellik. Kapsayıcılar içerebilen bir koleksiyon kapsayıcı yürütülürken çalışma zamanı tarafından işlenen yürütülebilir nesneleri olan görevler.Nesnelerin yürütme sırasını koleksiyon herhangi bir belirlenmiş PrecedenceConstraint her görevde kapsayıcılar ayarlayın. Başarı, başarısızlık veya tamamlanmasını temel yürütme dallanma öncelik kısıtlamaları etkinleştirme bir Executable içinde koleksiyon.
Her kapsayıcı sahip bir Executables bireyin bulunduğu koleksiyon Executable nesneler. Yürütülebilir her görev devralır ve uygulayan ExecutableExecute(Connections, Variables, IDTSEvents, IDTSLogging, Object) yöntem ve ExecutableValidate(Connections, Variables, IDTSEvents, IDTSLogging) yöntem. Bu iki yöntem, her işlem için çalışma zamanı altyapısı tarafından verilir Executable.
Bir paket için bir görev eklemek için , bir konteyner ile gereken bir Executables Varolan koleksiyon. Çoğu saat, görevi için ekleyecektir koleksiyon bir pakettir.Bu kapsayıcı için koleksiyon yürütülebilir yeni görevi eklemek için arama ExecutablesAdd(String) yöntem. Yöntem tek bir parametre CLSID, PROGID, hisse SENEDI ad, içeren bir dize olan veya TaskInfoCreationName() görevi, ekliyorsunuz.
Görev adları
Bir görev adı veya KIMLIĞI belirtebilirsiniz, ancak STOCK ad, en sık kullanılan parametresi ExecutablesAdd(String) yöntem. Bir görev tarafından tanımlanan bir yürütülebilir dosya eklemek için STOCK 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 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özdizimi isterseniz veya eklemek istediğiniz görev, STOKTA bir takma ad yoksa, uzun adını kullanarak yürütülebilir dosyası görev ekleyebilirsiniz.Bu sözdizimini, görevin sürüm numarasını da belirtin gerektirir.
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 için uzun ad programlı olarak kullanarak, görev sürüm eklemenize gerek kalmadan edinebilirsiniz AssemblyQualifiedName sınıfının özelliğini aşağıdaki örnekte gösterildiği gibi.Bu örnek, Microsoft.SqlServer.SQLTask derlemesine 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österen bir Executables Yeni bir paket topluluğundan ve sonra bir dosya sistemi görev ve toplu Ekle görev koleksiyona kullanarak kendi STOCK takma adlar. Bu örnek, Microsoft.SqlServer.FileSystemTask ve Microsoft.SqlServer.BulkInsertTask birleştirmeler için 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ı:
Microsoft.SqlServer.dts.Tasks.FileSystemTask.FileSystemTask yazın.
Microsoft.SqlServer.dts.Tasks.BulkInsertTask.BulkInsertTask yazın.
TaskHost kapsayıcı
The TaskHost class is a kapsayıcı that does not appear in the graphical user arabirim, but is very important in programming. Bu sınıf, her görev için bir sarmalayıcı olan.paket kullanılarak eklenen görevleri Add(String) yöntem olarak bir Executable nesne olarak atama bir TaskHost nesne. Bir görev olarak ne zaman artığını bir TaskHost, görev için ek özellikler ve yöntemler kullanabilirsiniz. Ayrıca, görev kendisini aracılığıyla erişilebilen InnerObject() özellik TaskHost. Gereksinimlerinize bağlı olarak, görev olarak tutmak isteyebilirsiniz bir TaskHost görevin özelliklerini kullanabilmesi için nesne Properties() koleksiyon. Kullanmanın yararı Properties() daha genel kod yazdığınız şeydir. Bir görev için belirli bir kodu gerekiyorsa, uygun nesne göreve atama.
Aşağıdaki kod örneği, atama gösterilmiştir bir TaskHost, içeren thBulkInsertTask bir BulkInsertTask, için 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 dosyayı atama gösterilmiştir bir TaskHostve InnerObject() yürütülebilir dosya türünü belirlemek için özellik, ana bilgisayar tarafından içeriliyor.
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ı:
Görev türü Microsoft.SqlServer.dts.Tasks.FileSystemTask.FileSystemTask bulundu
Görev türü Microsoft.SqlServer.dts.Tasks.BulkInsertTask.BulkInsertTask bulundu
The ExecutablesAdd(String) deyim returns an executable that is cast to a TaskHost object from the newly created Executable object.
Için küme özellikler veya yeni bir nesne üzerinde yöntem çağırmak için , iki seçeneğiniz vardır:
Use Properties() koleksiyon, TaskHost. Örneğin, bir özellik nesneden elde etmek için kullanın. th.Properties["propertyname"].GetValue(th)). Bir özellik ayarlamak için kullanın. th.Properties["propertyname"].SetValue(th, <value>);.
Atama InnerObject() ın TaskHost Görev sınıfına. Örneğin, toplu Ekle göreve atama için bir BulkInsertTask bir paket olarak eklendikten sonra bir Executable ve daha sonra atama için bir TaskHost, kullanma BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.
Kullanarak TaskHost sınıf kodu, görev özgü sınıf çevrim yerine aşağıdaki avantajları vardır:
The TaskHostProperties() provider does not require a reference to the assembly in the code.
Derleme zamanında görevin adını bilmek zorunda olduğundan, herhangi bir görev için genel yordamları kodu.Genel tür yordamlar tüm görevler için yöntem adını görev geçirmek ve yöntemi kodunu çalışır yöntemleri içerir.Bu sınama kod yazmak için iyi bir yöntemdir.
Gelen çevrim TaskHost Özel görev sınıfa, aşağıdaki avantajları vardır:
Visual Studio'nun proje, deyim tamamlama (ıntellisense) verir.
Kod, daha hızlı çalışabilir.
Görev özgü nesneleri erken bağlama ve sonuçta ortaya çıkan en iyi duruma getirmeleri etkinleştir.Önceki ve geç bağlama hakkında daha fazla bilgi için "Erken ve Late Binding", Visual Basic Dil Kavramları konusuna bakın.
Aşağıdaki kod örneği, görev kodu yeniden kullanma kavramını üzerinde genişletir.Çevrim görevleri yerine, belirli bir sınıf eşdeğerleri, örnek kod için yürütülebilir dosyayı atama gösterilmiştir bir TaskHost, sonra kullanır Properties() tüm görevleri karşı genel kod yazmak için .
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
|