Dodawanie składników przepływu danych programowo
Podczas tworzenia przepływ danych uruchamiania dodając składniki.A następnie skonfigurować te składniki i łączenia ich ze sobą ustanowienie przepływu danych przy uruchomieniu czas.W tej sekcji opisano Dodawanie składnika do zadania przepływ danych, tworzenie projektu -czas wystąpienie składnika, a następnie konfigurowanie składnika.Informacje o sposobach łączenie składników, zobacz Łączenie składników przepływu danych programowo.
Dodawanie składnika
Wywołanie New metoda ComponentMetaDataCollection kolekcja, aby utworzyć nowy składnik i dodać go do zadanie przepływu danych.Metoda zwraca IDTSComponentMetaData100 interfejs składnika.Jednak w tym punkcie IDTSComponentMetaData100 nie zawiera informacje specyficzne dla dowolnego jednego składnika.Ustaw ComponentClassID właściwość w celu określenia typu składnika.Zadania przepływ danych używa wartości tej właściwość do utworzenia instancji składnika przy uruchomieniu czas.
Wartość określona w ComponentClassID właściwość może być CLSID, PROGID, lub CreationName Właściwości składnika.Identyfikator CLSID normalnie jest wyświetlany w oknie dialogowym właściwość jako wartość składnika ComponentClassID właściwość.Informacje dotyczące uzyskiwania tej właściwość i inne właściwość dostępnych składników, zobacz Odkrywanie programowo składników przepływu danych.
Dodawanie składników zarządzanych
Aby dodać jeden składników przepływ danych zarządzanych przepływ danych nie można użyć CLSID lub PROGID, ponieważ te wartości punktu otoki, a nie sam składnik.Zamiast tego można użyć CreationName właściwość lub AssemblyQualifiedName właściwość, jak pokazano w następującej przykładowej.
Jeśli zamierzasz używać AssemblyQualifiedName właściwość, następnie należy dodać odwołanie w sieci Visual Studio projektu do wirtualny plik dziennika zawierającego składników zarządzanych.Zespoły te nie są wymienione na.NET karcie Dodaj odwołanie okno dialogowe.Zwykle należy wyszukać zlokalizować wirtualny plik dziennika w C:\Program files\microsoft sql server\100\dts\pipelinecomponents folder.
Składniki przepływ danych zarządzanych wbudowanych obejmują:
ADO.NET Źródło
Źródło XML
Docelowy element DataReader
SQL Server Compact docelowego
Składnik skryptów
Poniższy przykład kodu ilustruje oba sposoby dodawania składników zarządzanych do przepływ danych:
using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
namespace Microsoft.SqlServer.Dts.Samples
{
class Program
{
static void Main(string[] args)
{
Microsoft.SqlServer.Dts.Runtime.Package package = new Microsoft.SqlServer.Dts.Runtime.Package();
Executable e = package.Executables.Add("STOCK:PipelineTask");
Microsoft.SqlServer.Dts.Runtime.TaskHost thMainPipe = (Microsoft.SqlServer.Dts.Runtime.TaskHost)e;
MainPipe dataFlowTask = (MainPipe)thMainPipe.InnerObject;
// The Application object will be used to obtain the CreationName
// of a PipelineComponentInfo from its PipelineComponentInfos collection.
Application app = new Application();
// Add a first ADO NET source to the data flow.
// The CreationName property requires an Application instance.
IDTSComponentMetaData100 component1 = dataFlowTask.ComponentMetaDataCollection.New();
component1.Name = "DataReader Source";
component1.ComponentClassID = app.PipelineComponentInfos["DataReader Source"].CreationName;
// Add a second ADO NET source to the data flow.
// The AssemblyQualifiedName property requires a reference to the assembly.
IDTSComponentMetaData100 component2 = dataFlowTask.ComponentMetaDataCollection.New();
component2.Name = "DataReader Source";
component2.ComponentClassID = typeof(Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter).AssemblyQualifiedName;
}
}
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Module Module1
Sub Main()
Dim package As Microsoft.SqlServer.Dts.Runtime.Package = _
New Microsoft.SqlServer.Dts.Runtime.Package()
Dim e As Executable = package.Executables.Add("STOCK:PipelineTask")
Dim thMainPipe As Microsoft.SqlServer.Dts.Runtime.TaskHost = _
CType(e, Microsoft.SqlServer.Dts.Runtime.TaskHost)
Dim dataFlowTask As MainPipe = CType(thMainPipe.InnerObject, MainPipe)
' The Application object will be used to obtain the CreationName
' of a PipelineComponentInfo from its PipelineComponentInfos collection.
Dim app As New Application()
' Add a first ADO NET source to the data flow.
' The CreationName property requires an Application instance.
Dim component1 As IDTSComponentMetaData100 = _
dataFlowTask.ComponentMetaDataCollection.New()
component1.Name = "DataReader Source"
component1.ComponentClassID = app.PipelineComponentInfos("DataReader Source").CreationName
' Add a second ADO NET source to the data flow.
' The AssemblyQualifiedName property requires a reference to the assembly.
Dim component2 As IDTSComponentMetaData100 = _
dataFlowTask.ComponentMetaDataCollection.New()
component2.Name = "DataReader Source"
component2.ComponentClassID = _
GetType(Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter).AssemblyQualifiedName
End Sub
End Module
Tworzenie projektu -czas instancji składnika
Wywołanie Instantiate metoda tworzenia projektu czas instancji składnika, identyfikowane przez ComponentClassID właściwość.Metoda zwraca CManagedComponentWrapper obiekt, który jest otoka zarządzana dla IDTSDesigntimeComponent100 interfejs.
O ile to możliwe, należy zmodyfikować składnik przy użyciu metody projektowania -czas wystąpienia zamiast bezpośrednio modyfikując metadane składnika.Chociaż są elementy metadanych, które muszą być zestaw bezpośrednio, takie jak połączenia, zwykle jest wskazane bezpośrednio modyfikować metadane, ponieważ pomijać zdolność składnika do monitorowania i sprawdzania poprawności zmian.
Przypisywanie połączeń
Niektóre składniki, takie jak składnik OLE DB źródła wymagają połączenia z danymi zewnętrznymi i używać istniejącego ConnectionManager obiektu pakiet dla tego celu.Count Właściwość RuntimeConnectionCollection kolekcja wskazuje liczbę run-czas ConnectionManager obiektów wymagane przez składnik.Jeśli liczba jest większa od zera, to składnik wymaga połączenia.Przypisywanie menedżer połączeń z pakiet składnika, określając ConnectionManager i Name Właściwości pierwszego połączenia w RuntimeConnectionCollection.Note that the name of the connection manager in the run-time connection collection must match the name of the connection managerreferenced from the package.
Ustawienie wartości właściwości niestandardowych
Po utworzeniu projektu -czas instancji składnika wywołanie ProvideComponentProperties metoda.Ta metoda jest podobna do konstruktora, ponieważ tworząc jego właściwości niestandardowe i jego obiekty wejściowe i wyjściowe jest inicjowana nowo utworzony składnik.Nie wywołuj ProvideComponentProperties więcej niż jeden czas składnika, ponieważ składnik może zresetowanie i utracić wszelkie modyfikacje wcześniej metadane.
CustomPropertyCollection Składnika zawiera kolekcja z IDTSCustomProperty100 obiekty specyficzne dla składnika.W przeciwieństwie do innych modeli programowania, w którym właściwość obiektu są zawsze widoczne w obiekcie, składniki tylko wypełnienia ich kolekcje właściwość niestandardowych podczas wywoływania ProvideComponentProperties metoda.Po wywołaniu metoda SetComponentProperty metoda projektowania -czas instancji składnika do przypisywania wartości jego właściwości niestandardowych.Ta metoda przyjmuje parę nazwa i wartość określająca właściwość niestandardowych i zapewnia jej nową wartość.
Inicjowanie kolumn wyjściowych
Po dodać składnik do zadania i skonfigurować go zainicjować kolekcja kolumn w IDTSOutput100 obiektu.Ten krok jest szczególnie istotne dla składników źródło, ale nie może zainicjować kolumn dla transformacja i obiekt docelowy składników, ponieważ zazwyczaj zależą one kolumn, które otrzymują od nadrzędny składników.
Wywołanie ReinitializeMetaData metoda zainicjować kolumny wyjściowe składnika źródło.Ponieważ składniki nie są automatycznie łączone z zewnętrznymi źródłami danych, wywołać AcquireConnections metoda przed wywoływaniem ReinitializeMetaData do zapewniania dostępu składnika do jego zewnętrznego źródło danych i możliwość wypełniania jego metadane kolumna.Wreszcie, call ReleaseConnections metoda, aby zwolnić połączenia.
Następny krok
Po dodaniu i konfigurowanie składnika, następnym krokiem jest utworzenie ścieżki między składnikami, które omówiono w temacie Tworzenie ścieżki między dwa składniki.
Przykład
Poniższy przykładowy kod dodaje składnik OLE DB źródła do zadania przepływ danych, tworzy projekt -czas instancji składnika i konfiguruje właściwości składnika.W tym przykładzie wymaga dodatkowych odwołanie do wirtualny plik dziennika Microsoft.SqlServer.DTSRuntimeWrap.
using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
namespace Microsoft.SqlServer.Dts.Samples
{
class Program
{
static void Main(string[] args)
{
Runtime.Package package = new Runtime.Package();
Executable e = package.Executables.Add("STOCK:PipelineTask");
Runtime.TaskHost thMainPipe = e as Runtime.TaskHost;
MainPipe dataFlowTask = thMainPipe.InnerObject as MainPipe;
// Add an OLEDB connection manager to the package.
ConnectionManager cm = package.Connections.Add("OLEDB");
cm.Name = "OLEDB ConnectionManager";
cm.ConnectionString = "Data Source=(local);" +
"Initial Catalog=AdventureWorks2008R2;Provider=SQLNCLI11.1;" +
"Integrated Security=SSPI;"
// Add an OLE DB source to the data flow.
IDTSComponentMetaData100 component =
dataFlowTask.ComponentMetaDataCollection.New();
component.Name = "OLEDBSource";
component.ComponentClassID = "DTSAdapter.OleDbSource.2";
// You can also use the CLSID of the component instead of the PROGID.
//component.ComponentClassID = "{2C0A8BE5-1EDC-4353-A0EF-B778599C65A0}";
// Get the design time instance of the component.
CManagedComponentWrapper instance = component.Instantiate();
// Initialize the component
instance.ProvideComponentProperties();
// Specify the connection manager.
if (component.RuntimeConnectionCollection.Count > 0)
{
component.RuntimeConnectionCollection[0].ConnectionManager =
DtsConvert.GetExtendedInterface(package.Connections[0]);
component.RuntimeConnectionCollection[0].ConnectionManagerID =
package.Connections[0].ID; }
// Set the custom properties.
instance.SetComponentProperty("AccessMode", 2);
instance.SetComponentProperty("SqlCommand",
"Select * from Production.Product");
// Reinitialize the metadata.
instance.AcquireConnections(null);
instance.ReinitializeMetaData();
instance.ReleaseConnections();
// Add other components to the data flow and connect them.
}
}
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Module Module1
Sub Main()
Dim package As Microsoft.SqlServer.Dts.Runtime.Package = _
New Microsoft.SqlServer.Dts.Runtime.Package()
Dim e As Executable = package.Executables.Add("STOCK:PipelineTask")
Dim thMainPipe As Microsoft.SqlServer.Dts.Runtime.TaskHost = _
CType(e, Microsoft.SqlServer.Dts.Runtime.TaskHost)
Dim dataFlowTask As MainPipe = CType(thMainPipe.InnerObject, MainPipe)
' Add an OLEDB connection manager to the package.
Dim cm As ConnectionManager = package.Connections.Add("OLEDB")
cm.Name = "OLEDB ConnectionManager"
cm.ConnectionString = "Data Source=(local);" & _
"Initial Catalog=AdventureWorks2008R2;Provider=SQLCLI11.1;" & _
"Integrated Security=SSPI;"
' Add an OLE DB source to the data flow.
Dim component As IDTSComponentMetaData100 = _
dataFlowTask.ComponentMetaDataCollection.New()
component.Name = "OLEDBSource"
component.ComponentClassID = "DTSAdapter.OleDbSource.2"
' You can also use the CLSID of the component instead of the PROGID.
'component.ComponentClassID = "{2C0A8BE5-1EDC-4353-A0EF-B778599C65A0}";
' Get the design time instance of the component.
Dim instance As CManagedComponentWrapper = component.Instantiate()
' Initialize the component.
instance.ProvideComponentProperties()
' Specify the connection manager.
If component.RuntimeConnectionCollection.Count > 0 Then
component.RuntimeConnectionCollection(0).ConnectionManager = _
DtsConvert.GetExtendedInterface(package.Connections(0))
component.RuntimeConnectionCollection(0).ConnectionManagerID = _
package.Connections(0).ID
End If
' Set the custom properties.
instance.SetComponentProperty("AccessMode", 2)
instance.SetComponentProperty("SqlCommand", _
"Select * from Production.Product")
' Reinitialize the metadata.
instance.AcquireConnections(vbNull)
instance.ReinitializeMetaData()
instance.ReleaseConnections()
' Add other components to the data flow and connect them.
End Sub
End Module
|
Historia zmian
Zaktualizowana zawartość |
---|
Zaktualizowane próbki do dodawania składnika OLE DB źródła zadanie przepływ danych, aby dostawca SQLNCLI11.1 i wartość DTSAdapter.OleDbSource.2 ComponentClassID. |