Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Úlohy lze přidávat k následujícím typům objektů v run-time enginu:
Tyto třídy jsou považovány za kontejnery a všechny dědí vlastnost Executables . Kontejnery mohou obsahovat kolekci úloh, což jsou spustitelné objekty zpracované během běhu kontejneru. Pořadí provádění objektů v kolekci je určeno libovolnou PrecedenceConstraint množinou na každém úkolu v kontejnerech. Omezení přednosti umožňují větvení provedení na základě úspěchu, neúspěchu nebo dokončení v Executable kolekci.
Každý kontejner má kolekci, Executables která obsahuje jednotlivé Executable objekty. Každý spustitelný úkol dědí a implementuje Execute metodu a Validate metodu. Tyto dvě metody jsou vyvolány run-time enginem k zpracování každé .Executable
Pro přidání úkolu do balíčku potřebujete kontejner s existující Executables kolekcí. Většinou je úkol, který do kolekce přidáte, jen balíček. Pro přidání nového spustitelného souboru úlohy do kolekce pro tento kontejner se použije metoda Add . Metoda má jeden parametr, řetězec, který obsahuje názvy CLSID, PROGID, STOCK nebo CreationName úkolu, který přidáváte.
Názvy úkolů
Ačkoliv můžete zadat úkol podle názvu nebo podle ID, nejčastěji používaný Add parametr je STOCK. Pro přidání úkolu k spustitelnému souboru označenému názvem STOCK použijte následující syntaxi:
Executable exec = package.Executables.Add("STOCK:BulkInsertTask");
Dim exec As Executable = package.Executables.Add("STOCK:BulkInsertTask")
Následující seznam ukazuje názvy jednotlivých úkolů, které jsou používány za označením STOCK .
ActiveXScriptTask
BulkInsertTask
ExecuteProcessTask
ExecutePackageTask
Exec80PackageTask
FileSystemTask
FTPTask
MSMQTask
PipelineTask
ScriptTask
SendMailTask
SQLTask
Úkol TransferStoredProcedures
TransferLoginsTask
Úkol PřenosChybyZpráv
Úkol TransferJobs
Úkol TransferObjects
TransferDatabaseTask
WebServiceTask
WmiDataReaderTask
Úkol WmiEventWatcher
XMLTask
Pokud preferujete explicitnější syntaxi, nebo pokud úkol, který chcete přidat, nemá označení STOCK, můžete úkol přidat do spustitelného souboru pod jeho dlouhým názvem. Tato syntaxe vyžaduje, abyste také zadali číslo verze úkolu.
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")
Dlouhý název úkolu můžete získat programovaně, aniž byste museli specifikovat verzi úkolu, použitím vlastnosti třídy AssemblyQualifiedName , jak je ukázáno v následujícím příkladu. Tento příklad vyžaduje odkaz na Microsoft. SqlServer.SQLTask assembler.
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)
Následující příklad kódu ukazuje, jak vytvořit Executables kolekci z nového balíčku a poté přidat do kolekce úlohu souborového systému a úlohu Bulk Insert, přičemž použijete jejich názvy STOCK . Tento příklad vyžaduje odkaz na Microsoft. SqlServer.FileSystemTask a Microsoft. SqlServer.BulkInsertTask assemblies.
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
Ukázkový výstup:
Type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask
Type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask
TaskHost Container
Tato TaskHost třída je kontejner, který se v grafickém uživatelském rozhraní neobjevuje, ale je velmi důležitý v programování. Tato třída je obalem pro každý úkol. Úkoly, které jsou do balíčku přidány pomocí Add metody jako objektuExecutable, mohou být vykresleny jako objekt.TaskHost Když je úkol vykreslen jako , TaskHostmůžete na úkol použít další vlastnosti a metody. Také samotný úkol lze získat prostřednictvím InnerObject vlastnosti .TaskHost Podle vašich potřeb se můžete rozhodnout úkol ponechat jako objekt, TaskHost abyste mohli využívat vlastnosti úkolu prostřednictvím Properties kolekce. Výhodou použití je Properties , že můžete psát obecnější kód. Pokud potřebujete velmi specifický kód pro úkol, měli byste úkol přenést na jeho příslušný objekt.
Následující příklad kódu ukazuje, jak převést TaskHost, thBulkInsertTask, který obsahuje , BulkInsertTaskna objekt.BulkInsertTask
BulkInsertTask myTask = thBulkInsertTask.InnerObject as BulkInsertTask;
Dim myTask As BulkInsertTask = CType(thBulkInsertTask.InnerObject, BulkInsertTask)
Následující příklad kódu ukazuje, jak přehrát spustitelný soubor na , TaskHosta poté použít vlastnost InnerObject k určení, jaký typ spustitelného souboru hostitel obsahuje.
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
Ukázkový výstup:
Found task of type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask
Found task of type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask
Příkaz Add vrátí spustitelný soubor, který je přenášen na TaskHost objekt z nově vytvořeného Executable objektu.
Pro nastavení vlastností nebo volání metod na novém objektu máte dvě možnosti:
Použijte Properties kolekci .TaskHost Například pro získání vlastnosti z objektu použijeme
th.Properties["propertyname"].GetValue(th)). Pro nastavení vlastnosti použijteth.Properties["propertyname"].SetValue(th, <value>);.Sesílejte třídu InnerObject úkolu z úkolu TaskHost . Například pro převedení úlohy Bulk Insert do a BulkInsertTask poté, co byla přidána do balíčku jako a Executable a následně přenesete do , TaskHostpoužijte
BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.
Použití třídy TaskHost v kódu místo castingu do třídy specifické pro úkol má následující výhody:
Poskytovatel TaskHostProperties nevyžaduje odkaz na sestavení v předpisu.
Můžete naprogramovat obecné rutiny, které fungují pro jakýkoli úkol, protože nemusíte znát název úkolu při kompilaci. Takové obecné rutiny zahrnují metody, kdy předáte název úkolu metodě a kód metody funguje pro všechny úkoly. Je to dobrá metoda pro psaní testovacího kódu.
Sesávání z do TaskHost úkolově specifické třídy má následující výhody:
Projekt Visual Studio vám umožní dokončit výroky (IntelliSense).
Kód může běžet rychleji.
Objekty specifické pro úkol umožňují rané binování a následné optimalizace. Pro více informací o raném a pozdním bindingu viz téma "Early and Late binding" v Visual Basic Language Concepts.
Následující příklad kódu rozšiřuje koncept opětovného využití kódu úloh. Místo přenášení úloh do jejich konkrétních třídních ekvivalentů ukazuje příklad kódu, jak přenést spustitelný soubor do , TaskHosta poté používá k Properties napsání generického kódu proti všem úkolům.
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