Språk
Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SSIS Integration Runtime i Azure Data Factory
Uppgifter kan läggas till följande typer av objekt i körtidsmotorn:
Dessa klasser betraktas som behållare, och de ärver alla egenskapen Executables . Containrar kan innehålla en samling uppgifter, som är exekverbara objekt som bearbetas av körningen under containerns exekvering. Körordningen för objekten i samlingen bestäms av en mängd PrecedenceConstraint på varje uppgift i containrarna. Precedensbegränsningar möjliggör exekveringsgrening baserat på framgång, misslyckande eller slutförande av en Executable i samlingen.
Varje behållare har en Executables samling som innehåller de enskilda Executable objekten. Varje körbar uppgift ärver och implementerar Execute metoden och Validate metoden. Dessa två metoder anropas av körtidsmotorn för att bearbeta varje Executable.
För att lägga till en uppgift i ett paket behöver du en behållare med en Executables befintlig samling. Oftast är uppgiften du lägger till i samlingen ett paket. För att lägga till den nya taskexekverbara filen i samlingen för den containern anropar Add du metoden . Metoden har en enda parameter, en sträng, som innehåller CLSID, PROGID, STOCK-beteckningen eller CreationName för den uppgift du lägger till.
Uppgiftsnamn
Även om du kan ange en uppgift med namn eller ID, är STOCK-namnet den parameter som oftast används i metoden Add . För att lägga till en uppgift i en körbar fil som identifieras med STOCK-namnet , använd följande syntax:
Executable exec = package.Executables.Add("STOCK:BulkInsertTask");
Dim exec As Executable = package.Executables.Add("STOCK:BulkInsertTask")
Följande lista visar namnen för varje uppgift som används efter STOCK-namnet.
ActiveXScriptTask
BulkInsertTask
ExecuteProcessTask
ExecutePackageTask
Exec80PackageTask
FilSystemuppgift
FTPTask
MSMQTask
PipelineTask
ScriptTask
SendMailTask
SQLTask
TransferStoredProceduresTask
TransferLoginsTask
TransferErrorMessagesTask
TransferJobsTask
TransferObjectsTask
TransferDatabaseTask
WebServiceTask
WmiDataReaderTask
WmiEventWatcherUppgift
XMLTask
Om du föredrar en mer explicit syntax, eller om uppgiften du vill lägga till inte har ett STOCK-namn, kan du lägga till uppgiften i den exekverbara filen med dess långa namn. Denna syntax kräver att du också anger versionsnumret för uppgiften.
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")
Du kan programmera det långa namnet för uppgiften, utan att behöva specificera uppgiftsversionen, genom att använda egenskapen AssemblyQualifiedName för klassen, som visas i följande exempel. Detta exempel kräver en referens till Microsoft. SqlServer.SQLTask assembly.
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)
Följande kodexempel visar hur man skapar en Executables samling från ett nytt paket och sedan lägger till en filsystemuppgift och en Bulk Insert-uppgift till samlingen, genom att använda deras STOCK-beteckningar. Detta exempel kräver en referens till Microsoft. SqlServer.FileSystemTask och 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
Exempel på utdata:
Type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask
Type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask
TaskHost-behållaren
Klassen TaskHost är en behållare som inte förekommer i det grafiska användargränssnittet, men är mycket viktig i programmering. Denna klass är en wrapper för varje uppgift. Uppgifter som läggs till i paketet genom att använda Add metoden som ett Executable objekt kan omvandlas till ett TaskHost objekt. När en uppgift kastas som en TaskHost, kan du använda ytterligare egenskaper och metoder på uppgiften. Dessutom kan själva uppgiften nås genom egenskapen InnerObject .TaskHost Beroende på dina behov kan du välja att behålla uppgiften som ett TaskHost objekt så att du kan använda uppgiftens egenskaper genom samlingen Properties . Fördelen med att använda är Properties att du kan skriva mer generisk kod. Om du behöver mycket specifik kod för en uppgift bör du casta uppgiften till dess lämpliga objekt.
Följande kodexempel visar hur man kastar en TaskHost, thBulkInsertTask, som innehåller ett BulkInsertTask, till ett BulkInsertTask objekt.
BulkInsertTask myTask = thBulkInsertTask.InnerObject as BulkInsertTask;
Dim myTask As BulkInsertTask = CType(thBulkInsertTask.InnerObject, BulkInsertTask)
Följande kodexempel visar hur man castar den exekverbara filen till en TaskHost, och sedan använder egenskapen InnerObject för att avgöra vilken typ av exekverbar fil som finns hos värden.
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
Exempel på utdata:
Found task of type Microsoft.SqlServer.Dts.Tasks.FileSystemTask.FileSystemTask
Found task of type Microsoft.SqlServer.Dts.Tasks.BulkInsertTask.BulkInsertTask
Satsen Add returnerar en exekverbar fil som kastas till ett TaskHost objekt från det nyskapade Executable objektet.
För att sätta egenskaper eller anropa metoder på det nya objektet har du två alternativ:
Använd samlingen Properties av TaskHost. Till exempel, för att erhålla en egenskap från objektet, använd
th.Properties["propertyname"].GetValue(th)). För att sätta en egenskap, användth.Properties["propertyname"].SetValue(th, <value>);.Kasta av InnerObject till TaskHost uppgiftsklassen. Till exempel, för att kasta Bulk Insert-uppgiften till en BulkInsertTask efter att den har lagts till i ett paket som en Executable och därefter kastas till en TaskHost, använd
BulkInsertTask myTask = th.InnerObject as BulkInsertTask;.
Att använda TaskHost klassen i kod, istället för att kasta till den uppgiftsspecifika klassen, har följande fördelar:
Leverantören TaskHostProperties kräver ingen referens till sammansättningen i koden.
Du kan koda generiska rutiner som fungerar för vilken uppgift som helst, eftersom du inte behöver veta namnet på uppgiften vid kompilering. Sådana generiska rutiner inkluderar metoder där du skickar in namnet på uppgiften till metoden, och metodkoden fungerar för alla uppgifter. Detta är en bra metod för att skriva testkod.
Att kasta från till TaskHost uppgiftsspecifik klass har följande fördelar:
Visual Studio-projektet ger dig statement completion (IntelliSense).
Koden kan gå snabbare.
Uppgiftsspecifika objekt möjliggör tidig bindning och de resulterande optimeringarna. För mer information om tidig och sen bindning, se ämnet "Early and Late Binding" i Visual Basic Language Concepts.
Följande kodexempel utvecklar konceptet att återanvända uppgiftskod. Istället för att casta uppgifter till deras specifika klassmotsvarigheter visar kodexemplet hur man kastar den exekverbara filen till en TaskHost, och använder sedan för Properties att skriva generisk kod mot alla uppgifter.
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